Program: 45320
Project: 45320
Buggy source:
/** 
 * @param c
 * @param mode
 */
private void printChar(int c,short mode){
  String entity;
  boolean breakable=false;
  if (c == ' ' && !TidyUtils.toBoolean(mode & (PREFORMATTED | COMMENT | ATTRIBVALUE| CDATA))) {
    if (TidyUtils.toBoolean(mode & NOWRAP)) {
      if (this.configuration.isNumEntities() || this.configuration.isXmlTags()) {
        addC('&',linelen++);
        addC('#',linelen++);
        addC('1',linelen++);
        addC('6',linelen++);
        addC('0',linelen++);
        addC(';',linelen++);
      }
 else {
        addC('&',linelen++);
        addC('n',linelen++);
        addC('b',linelen++);
        addC('s',linelen++);
        addC('p',linelen++);
        addC(';',linelen++);
      }
      return;
    }
    wraphere=linelen;
  }
  if (TidyUtils.toBoolean(mode & (COMMENT | CDATA))) {
    addC(c,linelen++);
    return;
  }
  if (!TidyUtils.toBoolean(mode & CDATA)) {
    if (c == '<') {
      addC('&',linelen++);
      addC('l',linelen++);
      addC('t',linelen++);
      addC(';',linelen++);
      return;
    }
    if (c == '>') {
      addC('&',linelen++);
      addC('g',linelen++);
      addC('t',linelen++);
      addC(';',linelen++);
      return;
    }
    if (c == '&' && this.configuration.isQuoteAmpersand()) {
      addC('&',linelen++);
      addC('a',linelen++);
      addC('m',linelen++);
      addC('p',linelen++);
      addC(';',linelen++);
      return;
    }
    if (c == '"' && this.configuration.isQuoteMarks()) {
      addC('&',linelen++);
      addC('q',linelen++);
      addC('u',linelen++);
      addC('o',linelen++);
      addC('t',linelen++);
      addC(';',linelen++);
      return;
    }
    if (c == '\'' && this.configuration.isQuoteMarks()) {
      addC('&',linelen++);
      addC('#',linelen++);
      addC('3',linelen++);
      addC('9',linelen++);
      addC(';',linelen++);
      return;
    }
    if (c == 160 && !this.configuration.isRawOut()) {
      if (this.configuration.isMakeBare()) {
        addC(' ',linelen++);
      }
 else       if (this.configuration.isQuoteNbsp()) {
        addC('&',linelen++);
        if (this.configuration.isNumEntities() || this.configuration.isXmlTags()) {
          addC('#',linelen++);
          addC('1',linelen++);
          addC('6',linelen++);
          addC('0',linelen++);
        }
 else {
          addC('n',linelen++);
          addC('b',linelen++);
          addC('s',linelen++);
          addC('p',linelen++);
        }
        addC(';',linelen++);
      }
 else {
        addC(c,linelen++);
      }
      return;
    }
  }
  if ("String_Node_Str".equals(this.configuration.getOutCharEncodingName())) {
    if ((c >= 0x2000) && !TidyUtils.toBoolean(mode & PREFORMATTED)) {
      if (((c >= 0x2000) && (c <= 0x2006)) || ((c >= 0x2008) && (c <= 0x2010)) || ((c >= 0x2011) && (c <= 0x2046))|| ((c >= 0x207D) && (c <= 0x207E))|| ((c >= 0x208D) && (c <= 0x208E))|| ((c >= 0x2329) && (c <= 0x232A))|| ((c >= 0x3001) && (c <= 0x3003))|| ((c >= 0x3008) && (c <= 0x3011))|| ((c >= 0x3014) && (c <= 0x301F))|| ((c >= 0xFD3E) && (c <= 0xFD3F))|| ((c >= 0xFE30) && (c <= 0xFE44))|| ((c >= 0xFE49) && (c <= 0xFE52))|| ((c >= 0xFE54) && (c <= 0xFE61))|| ((c >= 0xFE6A) && (c <= 0xFE6B))|| ((c >= 0xFF01) && (c <= 0xFF03))|| ((c >= 0xFF05) && (c <= 0xFF0A))|| ((c >= 0xFF0C) && (c <= 0xFF0F))|| ((c >= 0xFF1A) && (c <= 0xFF1B))|| ((c >= 0xFF1F) && (c <= 0xFF20))|| ((c >= 0xFF3B) && (c <= 0xFF3D))|| ((c >= 0xFF61) && (c <= 0xFF65))) {
        wraphere=linelen + 2;
        breakable=true;
      }
 else {
switch (c) {
case 0xFE63:
case 0xFE68:
case 0x3030:
case 0x30FB:
case 0xFF3F:
case 0xFF5B:
case 0xFF5D:
          wraphere=linelen + 2;
        breakable=true;
    }
  }
  if (breakable) {
    if (((c >= 0x201A) && (c <= 0x201C)) || ((c >= 0x201E) && (c <= 0x201F))) {
      wraphere--;
    }
 else {
switch (c) {
case 0x2018:
case 0x2039:
case 0x2045:
case 0x207D:
case 0x208D:
case 0x2329:
case 0x3008:
case 0x300A:
case 0x300C:
case 0x300E:
case 0x3010:
case 0x3014:
case 0x3016:
case 0x3018:
case 0x301A:
case 0x301D:
case 0xFD3E:
case 0xFE35:
case 0xFE37:
case 0xFE39:
case 0xFE3B:
case 0xFE3D:
case 0xFE3F:
case 0xFE41:
case 0xFE43:
case 0xFE59:
case 0xFE5B:
case 0xFE5D:
case 0xFF08:
case 0xFF3B:
case 0xFF5B:
case 0xFF62:
        wraphere--;
    }
  }
}
}
 else if ("String_Node_Str".equals(this.configuration.getOutCharEncodingName())) {
addC(c,linelen++);
if (((c & 0xFF00) == 0xA100) && !TidyUtils.toBoolean(mode & PREFORMATTED)) {
  wraphere=linelen;
  if ((c > 0x5C) && (c < 0xAD) && ((c & 1) == 1)) {
    wraphere--;
  }
}
return;
}
 else if ("String_Node_Str".equals(this.configuration.getOutCharEncodingName()) || "String_Node_Str".equals(this.configuration.getOutCharEncodingName())) {
addC(c,linelen++);
return;
}
 else {
if (this.configuration.isRawOut()) {
  addC(c,linelen++);
  return;
}
}
}
if (c == 160 && TidyUtils.toBoolean(mode & PREFORMATTED)) {
addC(' ',linelen++);
return;
}
if (this.configuration.isMakeClean() && this.configuration.isAsciiChars() || this.configuration.isMakeBare()) {
if (c >= 0x2013 && c <= 0x201E) {
switch (c) {
case 0x2013:
case 0x2014:
  c='-';
break;
case 0x2018:
case 0x2019:
case 0x201A:
c='\'';
break;
case 0x201C:
case 0x201D:
case 0x201E:
c='"';
break;
}
}
}
if ("String_Node_Str".equals(this.configuration.getOutCharEncodingName())) {
if (c > 255) {
if (!this.configuration.isNumEntities()) {
entity=EntityTable.getDefaultEntityTable().entityName((short)c);
if (entity != null) {
entity="String_Node_Str" + entity + "String_Node_Str";
}
 else {
entity="String_Node_Str" + c + "String_Node_Str";
}
}
 else {
entity="String_Node_Str" + c + "String_Node_Str";
}
for (int i=0; i < entity.length(); i++) {
addC(entity.charAt(i),linelen++);
}
return;
}
if (c > 126 && c < 160) {
entity="String_Node_Str" + c + "String_Node_Str";
for (int i=0; i < entity.length(); i++) {
addC(entity.charAt(i),linelen++);
}
return;
}
addC(c,linelen++);
return;
}
if (this.configuration.getOutCharEncodingName().startsWith("String_Node_Str")) {
addC(c,linelen++);
return;
}
if (this.configuration.isXmlTags()) {
if (c > 127 && "String_Node_Str".equals(this.configuration.getOutCharEncodingName())) {
entity="String_Node_Str" + c + "String_Node_Str";
for (int i=0; i < entity.length(); i++) {
addC(entity.charAt(i),linelen++);
}
return;
}
addC(c,linelen++);
return;
}
if ("String_Node_Str".equals(this.configuration.getOutCharEncodingName()) && (c > 126 || (c < ' ' && c != '\t'))) {
if (!this.configuration.isNumEntities()) {
entity=EntityTable.getDefaultEntityTable().entityName((short)c);
if (entity != null) {
entity="String_Node_Str" + entity + "String_Node_Str";
}
 else {
entity="String_Node_Str" + c + "String_Node_Str";
}
}
 else {
entity="String_Node_Str" + c + "String_Node_Str";
}
for (int i=0; i < entity.length(); i++) {
addC(entity.charAt(i),linelen++);
}
return;
}
addC(c,linelen++);
}

Fixed version (ground truth):
/** 
 * @param c
 * @param mode
 */
private void printChar(int c,short mode){
  String entity;
  boolean breakable=false;
  if (c == ' ' && !TidyUtils.toBoolean(mode & (PREFORMATTED | COMMENT | ATTRIBVALUE| CDATA))) {
    if (TidyUtils.toBoolean(mode & NOWRAP)) {
      if (this.configuration.isNumEntities() || this.configuration.isXmlTags()) {
        addC('&',linelen++);
        addC('#',linelen++);
        addC('1',linelen++);
        addC('6',linelen++);
        addC('0',linelen++);
        addC(';',linelen++);
      }
 else {
        addC('&',linelen++);
        addC('n',linelen++);
        addC('b',linelen++);
        addC('s',linelen++);
        addC('p',linelen++);
        addC(';',linelen++);
      }
      return;
    }
    wraphere=linelen;
  }
  if (TidyUtils.toBoolean(mode & (COMMENT | CDATA))) {
    addC(c,linelen++);
    return;
  }
  if (!TidyUtils.toBoolean(mode & CDATA)) {
    if (c == '<') {
      addC('&',linelen++);
      addC('l',linelen++);
      addC('t',linelen++);
      addC(';',linelen++);
      return;
    }
    if (c == '>') {
      addC('&',linelen++);
      addC('g',linelen++);
      addC('t',linelen++);
      addC(';',linelen++);
      return;
    }
    if (c == '&' && this.configuration.isQuoteAmpersand()) {
      addC('&',linelen++);
      addC('a',linelen++);
      addC('m',linelen++);
      addC('p',linelen++);
      addC(';',linelen++);
      return;
    }
    if (c == '"' && this.configuration.isQuoteMarks()) {
      addC('&',linelen++);
      addC('q',linelen++);
      addC('u',linelen++);
      addC('o',linelen++);
      addC('t',linelen++);
      addC(';',linelen++);
      return;
    }
    if (c == '\'' && this.configuration.isQuoteMarks()) {
      addC('&',linelen++);
      addC('#',linelen++);
      addC('3',linelen++);
      addC('9',linelen++);
      addC(';',linelen++);
      return;
    }
    if (c == 160 && !this.configuration.isRawOut()) {
      if (this.configuration.isMakeBare()) {
        addC(' ',linelen++);
      }
 else       if (this.configuration.isQuoteNbsp()) {
        addC('&',linelen++);
        if (this.configuration.isNumEntities() || this.configuration.isXmlTags()) {
          addC('#',linelen++);
          addC('1',linelen++);
          addC('6',linelen++);
          addC('0',linelen++);
        }
 else {
          addC('n',linelen++);
          addC('b',linelen++);
          addC('s',linelen++);
          addC('p',linelen++);
        }
        addC(';',linelen++);
      }
 else {
        addC(c,linelen++);
      }
      return;
    }
  }
  if ("String_Node_Str".equals(this.configuration.getOutCharEncodingName())) {
    if ((c >= 0x2000) && !TidyUtils.toBoolean(mode & PREFORMATTED)) {
      if (((c >= 0x2000) && (c <= 0x2006)) || ((c >= 0x2008) && (c <= 0x2010)) || ((c >= 0x2011) && (c <= 0x2046))|| ((c >= 0x207D) && (c <= 0x207E))|| ((c >= 0x208D) && (c <= 0x208E))|| ((c >= 0x2329) && (c <= 0x232A))|| ((c >= 0x3001) && (c <= 0x3003))|| ((c >= 0x3008) && (c <= 0x3011))|| ((c >= 0x3014) && (c <= 0x301F))|| ((c >= 0xFD3E) && (c <= 0xFD3F))|| ((c >= 0xFE30) && (c <= 0xFE44))|| ((c >= 0xFE49) && (c <= 0xFE52))|| ((c >= 0xFE54) && (c <= 0xFE61))|| ((c >= 0xFE6A) && (c <= 0xFE6B))|| ((c >= 0xFF01) && (c <= 0xFF03))|| ((c >= 0xFF05) && (c <= 0xFF0A))|| ((c >= 0xFF0C) && (c <= 0xFF0F))|| ((c >= 0xFF1A) && (c <= 0xFF1B))|| ((c >= 0xFF1F) && (c <= 0xFF20))|| ((c >= 0xFF3B) && (c <= 0xFF3D))|| ((c >= 0xFF61) && (c <= 0xFF65))) {
        wraphere=linelen + 1;
        breakable=true;
      }
 else {
switch (c) {
case 0xFE63:
case 0xFE68:
case 0x3030:
case 0x30FB:
case 0xFF3F:
case 0xFF5B:
case 0xFF5D:
          wraphere=linelen + 1;
        breakable=true;
    }
  }
  if (breakable) {
    if (((c >= 0x201A) && (c <= 0x201C)) || ((c >= 0x201E) && (c <= 0x201F))) {
      wraphere--;
    }
 else {
switch (c) {
case 0x2018:
case 0x2039:
case 0x2045:
case 0x207D:
case 0x208D:
case 0x2329:
case 0x3008:
case 0x300A:
case 0x300C:
case 0x300E:
case 0x3010:
case 0x3014:
case 0x3016:
case 0x3018:
case 0x301A:
case 0x301D:
case 0xFD3E:
case 0xFE35:
case 0xFE37:
case 0xFE39:
case 0xFE3B:
case 0xFE3D:
case 0xFE3F:
case 0xFE41:
case 0xFE43:
case 0xFE59:
case 0xFE5B:
case 0xFE5D:
case 0xFF08:
case 0xFF3B:
case 0xFF5B:
case 0xFF62:
        wraphere--;
    }
  }
}
}
 else if ("String_Node_Str".equals(this.configuration.getOutCharEncodingName())) {
addC(c,linelen++);
if (((c & 0xFF00) == 0xA100) && !TidyUtils.toBoolean(mode & PREFORMATTED)) {
  wraphere=linelen;
  if ((c > 0x5C) && (c < 0xAD) && ((c & 1) == 1)) {
    wraphere--;
  }
}
return;
}
 else if ("String_Node_Str".equals(this.configuration.getOutCharEncodingName()) || "String_Node_Str".equals(this.configuration.getOutCharEncodingName())) {
addC(c,linelen++);
return;
}
 else {
if (this.configuration.isRawOut()) {
  addC(c,linelen++);
  return;
}
}
}
if (c == 160 && TidyUtils.toBoolean(mode & PREFORMATTED)) {
addC(' ',linelen++);
return;
}
if (this.configuration.isMakeClean() && this.configuration.isAsciiChars() || this.configuration.isMakeBare()) {
if (c >= 0x2013 && c <= 0x201E) {
switch (c) {
case 0x2013:
case 0x2014:
  c='-';
break;
case 0x2018:
case 0x2019:
case 0x201A:
c='\'';
break;
case 0x201C:
case 0x201D:
case 0x201E:
c='"';
break;
}
}
}
if ("String_Node_Str".equals(this.configuration.getOutCharEncodingName())) {
if (c > 255) {
if (!this.configuration.isNumEntities()) {
entity=EntityTable.getDefaultEntityTable().entityName((short)c);
if (entity != null) {
entity="String_Node_Str" + entity + "String_Node_Str";
}
 else {
entity="String_Node_Str" + c + "String_Node_Str";
}
}
 else {
entity="String_Node_Str" + c + "String_Node_Str";
}
for (int i=0; i < entity.length(); i++) {
addC(entity.charAt(i),linelen++);
}
return;
}
if (c > 126 && c < 160) {
entity="String_Node_Str" + c + "String_Node_Str";
for (int i=0; i < entity.length(); i++) {
addC(entity.charAt(i),linelen++);
}
return;
}
addC(c,linelen++);
return;
}
if (this.configuration.getOutCharEncodingName().startsWith("String_Node_Str")) {
addC(c,linelen++);
return;
}
if (this.configuration.isXmlTags()) {
if (c > 127 && "String_Node_Str".equals(this.configuration.getOutCharEncodingName())) {
entity="String_Node_Str" + c + "String_Node_Str";
for (int i=0; i < entity.length(); i++) {
addC(entity.charAt(i),linelen++);
}
return;
}
addC(c,linelen++);
return;
}
if ("String_Node_Str".equals(this.configuration.getOutCharEncodingName()) && (c > 126 || (c < ' ' && c != '\t'))) {
if (!this.configuration.isNumEntities()) {
entity=EntityTable.getDefaultEntityTable().entityName((short)c);
if (entity != null) {
entity="String_Node_Str" + entity + "String_Node_Str";
}
 else {
entity="String_Node_Str" + c + "String_Node_Str";
}
}
 else {
entity="String_Node_Str" + c + "String_Node_Str";
}
for (int i=0; i < entity.length(); i++) {
addC(entity.charAt(i),linelen++);
}
return;
}
addC(c,linelen++);
}