Program: 135959
Project: 135959
Buggy source:
private final void unboxComment() throws org.eclipse.jface.text.BadLocationException {
  if ((offset > 2) && (text.charAt(offset) == ')')) {
    offset--;
  }
  if ((offset > 1) && (text.charAt(offset) == '*')) {
    offset--;
  }
  String errorMsg="String_Node_Str";
  int startOffset=text.lastIndexOf("String_Node_Str",offset);
  int endOffset=text.indexOf("String_Node_Str",offset) + 3;
  if ((startOffset < 0) || (endOffset < 0)) {
    displayNotInBoxedCommentError(errorMsg);
    return;
  }
  int startIndent=startOffset - doc.getLineOffset(doc.getLineOfOffset(startOffset));
  int asteriskLength=RightMargin - startIndent - 1;
  String asterisks=StringHelper.copyString("String_Node_Str",asteriskLength);
  int beginLine=doc.getLineOfOffset(startOffset);
  int endLine=doc.getLineOfOffset(endOffset);
  if (beginLine == endLine) {
    if (text.substring(startOffset + 1,endOffset - 1).equals(StringHelper.copyString("String_Node_Str",endOffset - startOffset - 2))) {
      displayNotInBoxedCommentError("String_Node_Str" + "String_Node_Str");
    }
 else {
      displayNotInBoxedCommentError(errorMsg);
    }
    return;
  }
  StringBuffer buffer=new StringBuffer(endOffset - startOffset - 6 * (endLine - beginLine));
  buffer.append(asterisks);
  buffer.append(StringHelper.newline);
  for (int i=beginLine + 1; i < endLine; i++) {
    IRegion lineInfo=doc.getLineInformation(i);
    String currentLine=doc.get(lineInfo.getOffset(),lineInfo.getLength());
    int beginTokenIndex=currentLine.indexOf("String_Node_Str");
    int endTokenIndex=currentLine.indexOf("String_Node_Str");
    if ((!(beginTokenIndex < 0)) && (!(beginTokenIndex > endTokenIndex))) {
      buffer.append(StringHelper.trimEnd(currentLine.substring(beginTokenIndex + 3,endTokenIndex)));
      buffer.append(StringHelper.newline);
    }
 else {
      buffer.append(currentLine);
      buffer.append(StringHelper.newline);
    }
  }
  buffer.append(StringHelper.copyString("String_Node_Str",startIndent));
  buffer.append(asterisks);
  doc.replace(startOffset + 1,endOffset - 2 - startOffset,buffer.toString());
  return;
}

Fixed version (ground truth):
private final void unboxComment() throws org.eclipse.jface.text.BadLocationException {
  if ((offset > 2) && (text.charAt(offset) == ')')) {
    offset--;
  }
  if ((offset > 1) && (text.charAt(offset) == '*')) {
    offset--;
  }
  String errorMsg="String_Node_Str";
  int startOffset=text.lastIndexOf("String_Node_Str",offset);
  int endOffset=text.indexOf("String_Node_Str",offset) + 3;
  if ((startOffset < 0) || (endOffset < 0)) {
    displayNotInBoxedCommentError(errorMsg);
    return;
  }
  int startIndent=startOffset - doc.getLineOffset(doc.getLineOfOffset(startOffset));
  int asteriskLength=RightMargin - startIndent - 1;
  String asterisks=StringHelper.copyString("String_Node_Str",asteriskLength);
  int beginLine=doc.getLineOfOffset(startOffset);
  int endLine=doc.getLineOfOffset(endOffset);
  if (beginLine == endLine) {
    if (text.substring(startOffset + 1,endOffset - 1).equals(StringHelper.copyString("String_Node_Str",endOffset - startOffset - 2))) {
      displayNotInBoxedCommentError("String_Node_Str" + "String_Node_Str");
    }
 else {
      displayNotInBoxedCommentError(errorMsg);
    }
    return;
  }
  StringBuffer buffer=null;
  int bufferSize=endOffset - startOffset - 6 * (endLine - beginLine);
  if (bufferSize > 0) {
    buffer=new StringBuffer(bufferSize);
  }
 else {
    buffer=new StringBuffer();
  }
  buffer.append(asterisks);
  buffer.append(StringHelper.newline);
  for (int i=beginLine + 1; i < endLine; i++) {
    IRegion lineInfo=doc.getLineInformation(i);
    String currentLine=doc.get(lineInfo.getOffset(),lineInfo.getLength());
    int beginTokenIndex=currentLine.indexOf("String_Node_Str");
    int endTokenIndex=currentLine.indexOf("String_Node_Str");
    if ((!(beginTokenIndex < 0)) && (!(beginTokenIndex > endTokenIndex))) {
      buffer.append(StringHelper.trimEnd(currentLine.substring(beginTokenIndex + 3,endTokenIndex)));
      buffer.append(StringHelper.newline);
    }
 else {
      buffer.append(currentLine);
      buffer.append(StringHelper.newline);
    }
  }
  buffer.append(StringHelper.copyString("String_Node_Str",startIndent));
  buffer.append(asterisks);
  doc.replace(startOffset + 1,endOffset - 2 - startOffset,buffer.toString());
  return;
}