Program: 9145
Project: 9145
Buggy source:
/** 
 * post-process result  - use file name as keyword - clip / for dir offsets - extract purejava keyword variants - extract bugID - convert test options to force-options - detect illegal xml characters
 */
private void cleanup(AjcTest.Spec result,LineReader lineReader){
  LangUtil.throwIaxIfNull(result,"String_Node_Str");
  LangUtil.throwIaxIfNull(lineReader,"String_Node_Str");
  File suiteFile=lineReader.getFile();
  String name=suiteFile.getName();
  if (!name.endsWith("String_Node_Str")) {
    throw new Error("String_Node_Str" + name);
  }
  result.addKeyword("String_Node_Str" + name.substring(0,name.length() - 4));
  final String dir=result.testDirOffset;
  if (dir.endsWith("String_Node_Str")) {
    result.testDirOffset=dir.substring(0,dir.length() - 1);
  }
  StringBuffer description=new StringBuffer(result.description);
  if (strip(description,"String_Node_Str")) {
    result.addKeyword("String_Node_Str");
  }
  if (strip(description,"String_Node_Str")) {
    result.addKeyword("String_Node_Str");
  }
  if (strip(description,"String_Node_Str")) {
    result.addKeyword("String_Node_Str");
  }
  String input=description.toString();
  int loc=input.indexOf("String_Node_Str");
  if (-1 != loc) {
    String prefix=input.substring(0,loc).trim();
    String pr=input.substring(loc + 3,loc + 6).trim();
    String suffix=input.substring(loc + 6).trim();
    description.setLength(0);
    description.append((prefix + "String_Node_Str" + suffix).trim());
    try {
      result.setBugId(Integer.valueOf(pr).intValue());
    }
 catch (    NumberFormatException e) {
      throw new Error("String_Node_Str" + pr + "String_Node_Str"+ result+ "String_Node_Str"+ lineReader);
    }
  }
  input=description.toString();
  String error=null;
  if (-1 != input.indexOf("String_Node_Str")) {
    error="String_Node_Str";
  }
 else   if (-1 != input.indexOf("String_Node_Str")) {
    error="String_Node_Str";
  }
 else   if (-1 != input.indexOf("String_Node_Str")) {
    error="String_Node_Str";
  }
 else   if (-1 != input.indexOf("String_Node_Str")) {
    error="String_Node_Str";
  }
  if (null != error) {
    throw new Error(error + "String_Node_Str" + input+ "String_Node_Str"+ lineReader);
  }
  result.description=input;
  ArrayList newOptions=new ArrayList();
  ArrayList optionsCopy=result.getOptionsList();
  for (Iterator iter=optionsCopy.iterator(); iter.hasNext(); ) {
    String option=(String)iter.next();
    if (option.startsWith("String_Node_Str")) {
      newOptions.add("String_Node_Str" + option.substring(1));
    }
 else {
      throw new Error("String_Node_Str" + option);
    }
  }
  result.setOptionsArray((String[])newOptions.toArray(new String[0]));
}

Fixed version (ground truth):
/** 
 * post-process result  - use file name as keyword - clip / for dir offsets - extract purejava keyword variants - extract bugID - convert test options to force-options - detect illegal xml characters
 */
private void cleanup(AjcTest.Spec result,UtilLineReader lineReader){
  LangUtil.throwIaxIfNull(result,"String_Node_Str");
  LangUtil.throwIaxIfNull(lineReader,"String_Node_Str");
  File suiteFile=lineReader.getFile();
  String name=suiteFile.getName();
  if (!name.endsWith("String_Node_Str")) {
    throw new Error("String_Node_Str" + name);
  }
  result.addKeyword("String_Node_Str" + name.substring(0,name.length() - 4));
  final String dir=result.testDirOffset;
  if (dir.endsWith("String_Node_Str")) {
    result.testDirOffset=dir.substring(0,dir.length() - 1);
  }
  StringBuffer description=new StringBuffer(result.description);
  if (strip(description,"String_Node_Str")) {
    result.addKeyword("String_Node_Str");
  }
  if (strip(description,"String_Node_Str")) {
    result.addKeyword("String_Node_Str");
  }
  if (strip(description,"String_Node_Str")) {
    result.addKeyword("String_Node_Str");
  }
  String input=description.toString();
  int loc=input.indexOf("String_Node_Str");
  if (-1 != loc) {
    String prefix=input.substring(0,loc).trim();
    String pr=input.substring(loc + 3,loc + 6).trim();
    String suffix=input.substring(loc + 6).trim();
    description.setLength(0);
    description.append((prefix + "String_Node_Str" + suffix).trim());
    try {
      result.setBugId(Integer.valueOf(pr).intValue());
    }
 catch (    NumberFormatException e) {
      throw new Error("String_Node_Str" + pr + "String_Node_Str"+ result+ "String_Node_Str"+ lineReader);
    }
  }
  input=description.toString();
  String error=null;
  if (-1 != input.indexOf("String_Node_Str")) {
    error="String_Node_Str";
  }
 else   if (-1 != input.indexOf("String_Node_Str")) {
    error="String_Node_Str";
  }
 else   if (-1 != input.indexOf("String_Node_Str")) {
    error="String_Node_Str";
  }
 else   if (-1 != input.indexOf("String_Node_Str")) {
    error="String_Node_Str";
  }
  if (null != error) {
    throw new Error(error + "String_Node_Str" + input+ "String_Node_Str"+ lineReader);
  }
  result.description=input;
  ArrayList newOptions=new ArrayList();
  ArrayList optionsCopy=result.getOptionsList();
  for (Iterator iter=optionsCopy.iterator(); iter.hasNext(); ) {
    String option=(String)iter.next();
    if (option.startsWith("String_Node_Str")) {
      newOptions.add("String_Node_Str" + option.substring(1));
    }
 else {
      throw new Error("String_Node_Str" + option);
    }
  }
  result.setOptionsArray((String[])newOptions.toArray(new String[0]));
}