Program: 163228
Project: 163228
Buggy source:
@Override protected final void parseRecord(){
  if (ch <= ' ' && ignoreLeadingWhitespace && whitespaceRangeStart < ch) {
    ch=input.skipWhitespace(ch,delimiter,quote);
  }
  while (ch != newLine) {
    if (ch <= ' ' && ignoreLeadingWhitespace && whitespaceRangeStart < ch) {
      ch=input.skipWhitespace(ch,delimiter,quote);
    }
    if (ch == delimiter || ch == newLine) {
      output.emptyParsed();
    }
 else {
      unescaped=false;
      prev='\0';
      if (ch == quote) {
        output.trim=false;
        input.enableNormalizeLineEndings(normalizeLineEndingsInQuotes);
        if (output.appender.length() == 0) {
          String value=input.getQuotedString(quote,quoteEscape,escapeEscape,maxColumnLength,delimiter,newLine,keepQuotes,keepEscape);
          if (value != null) {
            output.valueParsed(value == "String_Node_Str" ? emptyValue : value);
            try {
              ch=input.nextChar();
              if (ch == delimiter) {
                try {
                  ch=input.nextChar();
                }
 catch (                EOFException e) {
                  output.emptyParsed();
                  return;
                }
              }
            }
 catch (            EOFException e) {
              return;
            }
            continue;
          }
        }
        parseQuotedValue();
        input.enableNormalizeLineEndings(true);
        output.valueParsed();
      }
 else       if (doNotEscapeUnquotedValues) {
        String value=null;
        if (output.appender.length() == 0) {
          value=input.getString(ch,delimiter,ignoreTrailingWhitespace,nullValue,maxColumnLength);
        }
        if (value != null) {
          output.valueParsed(value);
          ch=input.getChar();
        }
 else {
          output.trim=ignoreTrailingWhitespace;
          ch=output.appender.appendUntil(ch,input,delimiter,newLine);
          output.valueParsed();
        }
      }
 else {
        output.trim=ignoreTrailingWhitespace;
        parseValueProcessingEscape();
        output.valueParsed();
      }
    }
    if (ch != newLine) {
      ch=input.nextChar();
      if (ch == newLine) {
        output.emptyParsed();
      }
    }
  }
}

Fixed version (ground truth):
@Override protected final void parseRecord(){
  if (ch <= ' ' && ignoreLeadingWhitespace && whitespaceRangeStart < ch) {
    ch=input.skipWhitespace(ch,delimiter,quote);
  }
  while (ch != newLine) {
    if (ch <= ' ' && ignoreLeadingWhitespace && whitespaceRangeStart < ch) {
      ch=input.skipWhitespace(ch,delimiter,quote);
    }
    if (ch == delimiter || ch == newLine) {
      output.emptyParsed();
    }
 else {
      unescaped=false;
      prev='\0';
      if (ch == quote) {
        output.trim=false;
        input.enableNormalizeLineEndings(normalizeLineEndingsInQuotes);
        if (output.appender.length() == 0) {
          String value=input.getQuotedString(quote,quoteEscape,escapeEscape,maxColumnLength,delimiter,newLine,keepQuotes,keepEscape);
          if (value != null) {
            output.valueParsed(value == "String_Node_Str" ? emptyValue : value);
            try {
              ch=input.nextChar();
              if (ch == delimiter) {
                try {
                  ch=input.nextChar();
                  if (ch == newLine) {
                    output.emptyParsed();
                  }
                }
 catch (                EOFException e) {
                  output.emptyParsed();
                  return;
                }
              }
            }
 catch (            EOFException e) {
              return;
            }
            continue;
          }
        }
        parseQuotedValue();
        input.enableNormalizeLineEndings(true);
        output.valueParsed();
      }
 else       if (doNotEscapeUnquotedValues) {
        String value=null;
        if (output.appender.length() == 0) {
          value=input.getString(ch,delimiter,ignoreTrailingWhitespace,nullValue,maxColumnLength);
        }
        if (value != null) {
          output.valueParsed(value);
          ch=input.getChar();
        }
 else {
          output.trim=ignoreTrailingWhitespace;
          ch=output.appender.appendUntil(ch,input,delimiter,newLine);
          output.valueParsed();
        }
      }
 else {
        output.trim=ignoreTrailingWhitespace;
        parseValueProcessingEscape();
        output.valueParsed();
      }
    }
    if (ch != newLine) {
      ch=input.nextChar();
      if (ch == newLine) {
        output.emptyParsed();
      }
    }
  }
}