Program: 92269
Project: 92269
Buggy source:
/** 
 * Creates a   {@code Citation} element if at least one of the required attributes is non-null.This method will reuse the  {@link #pointOfContact} field, if non-null and suitable.
 * @param identifier The citation {@code <gmd:identifier> attribute.}
 * @throws IOException If an I/O operation was necessary but failed.
 */
private Citation createCitation(final Identifier identifier) throws IOException {
  String title=decoder.stringValue(TITLE);
  if (title == null) {
    title=decoder.stringValue("String_Node_Str");
    if (title == null) {
      title=decoder.stringValue("String_Node_Str");
      if (title == null) {
        title=decoder.getTitle();
      }
    }
  }
  final Date creation=decoder.dateValue(DATE_CREATED);
  final Date modified=decoder.dateValue(DATE_MODIFIED);
  final Date issued=decoder.dateValue(DATE_ISSUED);
  final String references=decoder.stringValue(REFERENCES);
  final DefaultCitation citation=new DefaultCitation(title);
  if (identifier != null) {
    citation.getIdentifiers().add(identifier);
  }
  if (creation != null)   citation.getDates().add(new DefaultCitationDate(creation,DateType.CREATION));
  if (modified != null)   citation.getDates().add(new DefaultCitationDate(modified,DateType.REVISION));
  if (issued != null)   citation.getDates().add(new DefaultCitationDate(issued,DateType.PUBLICATION));
  if (pointOfContact != null) {
    final DefaultResponsibleParty np=new DefaultResponsibleParty(Role.ORIGINATOR);
    np.setIndividualName(pointOfContact.getIndividualName());
    np.setOrganisationName(pointOfContact.getOrganisationName());
    np.setContactInfo(pointOfContact.getContactInfo());
    citation.getCitedResponsibleParties().add(np);
  }
  for (  final String path : searchPath) {
    decoder.setSearchPath(path);
    final ResponsibleParty contributor=createResponsibleParty(CONTRIBUTOR,false);
    if (contributor != null && contributor != pointOfContact) {
      addIfAbsent(citation.getCitedResponsibleParties(),contributor);
    }
  }
  decoder.setSearchPath(searchPath);
  citation.setOtherCitationDetails(toInternationalString(references));
  return citation.isEmpty() ? null : citation;
}

Fixed version (ground truth):
/** 
 * Creates a   {@code Citation} element if at least one of the required attributes is non-null.This method will reuse the  {@link #pointOfContact} field, if non-null and suitable.
 * @param identifier The citation {@code <gmd:identifier>} attribute.
 * @throws IOException If an I/O operation was necessary but failed.
 */
private Citation createCitation(final Identifier identifier) throws IOException {
  String title=decoder.stringValue(TITLE);
  if (title == null) {
    title=decoder.stringValue("String_Node_Str");
    if (title == null) {
      title=decoder.stringValue("String_Node_Str");
      if (title == null) {
        title=decoder.getTitle();
      }
    }
  }
  final Date creation=decoder.dateValue(DATE_CREATED);
  final Date modified=decoder.dateValue(DATE_MODIFIED);
  final Date issued=decoder.dateValue(DATE_ISSUED);
  final String references=decoder.stringValue(REFERENCES);
  final DefaultCitation citation=new DefaultCitation(title);
  if (identifier != null) {
    citation.getIdentifiers().add(identifier);
  }
  if (creation != null)   citation.getDates().add(new DefaultCitationDate(creation,DateType.CREATION));
  if (modified != null)   citation.getDates().add(new DefaultCitationDate(modified,DateType.REVISION));
  if (issued != null)   citation.getDates().add(new DefaultCitationDate(issued,DateType.PUBLICATION));
  if (pointOfContact != null) {
    final DefaultResponsibleParty np=new DefaultResponsibleParty(Role.ORIGINATOR);
    np.setIndividualName(pointOfContact.getIndividualName());
    np.setOrganisationName(pointOfContact.getOrganisationName());
    np.setContactInfo(pointOfContact.getContactInfo());
    citation.getCitedResponsibleParties().add(np);
  }
  for (  final String path : searchPath) {
    decoder.setSearchPath(path);
    final ResponsibleParty contributor=createResponsibleParty(CONTRIBUTOR,false);
    if (contributor != null && contributor != pointOfContact) {
      addIfAbsent(citation.getCitedResponsibleParties(),contributor);
    }
  }
  decoder.setSearchPath(searchPath);
  citation.setOtherCitationDetails(toInternationalString(references));
  return citation.isEmpty() ? null : citation;
}