Program: 83152
Project: 83152
Buggy source:
static boolean parseMetaDataTags(char[] unitSource,HasMetaData hasMetaData,Javadoc javadoc){
  int start=javadoc.sourceStart;
  int end=javadoc.sourceEnd;
  char[] comment=CharOperation.subarray(unitSource,start,end + 1);
  BufferedReader reader=new BufferedReader(new CharArrayReader(comment));
  String activeTag=null;
  final List tagValues=new ArrayList();
  try {
    String line=reader.readLine();
    boolean firstLine=true;
    while (line != null) {
      if (firstLine) {
        firstLine=false;
        int commentStart=line.indexOf("String_Node_Str");
        if (commentStart == -1) {
          return false;
        }
        line=line.substring(commentStart + 3);
      }
      String[] tokens=PATTERN_WHITESPACE.split(line);
      boolean canIgnoreStar=true;
      for (int i=0; i < tokens.length; i++) {
        String token=tokens[i];
        if (token.endsWith("String_Node_Str")) {
          token=token.substring(0,token.length() - 2);
        }
        if (canIgnoreStar && token.startsWith("String_Node_Str")) {
          token=token.substring(1);
          canIgnoreStar=false;
        }
        if (token.length() > 0) {
          canIgnoreStar=false;
          if (token.startsWith("String_Node_Str")) {
            if (activeTag != null) {
              finishTag(hasMetaData,activeTag,tagValues);
            }
            activeTag=token.substring(1);
          }
 else           if (activeTag != null) {
            tagValues.add(token);
          }
 else {
          }
        }
      }
      line=reader.readLine();
    }
  }
 catch (  IOException e) {
    return false;
  }
  finishTag(hasMetaData,activeTag,tagValues);
  return true;
}

Fixed version (ground truth):
static boolean parseMetaDataTags(char[] unitSource,HasMetaData hasMetaData,Javadoc javadoc){
  int start=javadoc.sourceStart;
  int end=javadoc.sourceEnd;
  char[] comment=CharOperation.subarray(unitSource,start,end + 1);
  if (comment == null) {
    comment=new char[0];
  }
  BufferedReader reader=new BufferedReader(new CharArrayReader(comment));
  String activeTag=null;
  final List tagValues=new ArrayList();
  try {
    String line=reader.readLine();
    boolean firstLine=true;
    while (line != null) {
      if (firstLine) {
        firstLine=false;
        int commentStart=line.indexOf("String_Node_Str");
        if (commentStart == -1) {
          return false;
        }
        line=line.substring(commentStart + 3);
      }
      String[] tokens=PATTERN_WHITESPACE.split(line);
      boolean canIgnoreStar=true;
      for (int i=0; i < tokens.length; i++) {
        String token=tokens[i];
        if (token.endsWith("String_Node_Str")) {
          token=token.substring(0,token.length() - 2);
        }
        if (canIgnoreStar && token.startsWith("String_Node_Str")) {
          token=token.substring(1);
          canIgnoreStar=false;
        }
        if (token.length() > 0) {
          canIgnoreStar=false;
          if (token.startsWith("String_Node_Str")) {
            if (activeTag != null) {
              finishTag(hasMetaData,activeTag,tagValues);
            }
            activeTag=token.substring(1);
          }
 else           if (activeTag != null) {
            tagValues.add(token);
          }
 else {
          }
        }
      }
      line=reader.readLine();
    }
  }
 catch (  IOException e) {
    return false;
  }
  finishTag(hasMetaData,activeTag,tagValues);
  return true;
}