Program: 11509
Project: 11509
Buggy source:
private void addFirstLastLineTimes(final int rasterHeight){
  final MetadataElement absRoot=AbstractMetadata.getAbstractedMetadata(product);
  final MetadataElement root=AbstractMetadata.getOriginalProductMetadata(product);
  final MetadataElement globalElem=root.getElement(NetcdfConstants.GLOBAL_ATTRIBUTES_NAME);
  final MetadataElement bandElem=getBandElement(product.getBandAt(0));
  final double referenceUTC=ReaderUtils.getTime(globalElem,"String_Node_Str",AbstractMetadata.dateFormat).getMJD();
  double firstLineTime=bandElem.getAttributeDouble("String_Node_Str",0) / (24 * 3600);
  if (firstLineTime == 0) {
    firstLineTime=globalElem.getElement("String_Node_Str").getElement("String_Node_Str").getAttributeDouble("String_Node_Str") / (24 * 3600);
  }
  double lastLineTime=bandElem.getAttributeDouble("String_Node_Str",0) / (24 * 3600);
  if (lastLineTime == 0) {
    lastLineTime=globalElem.getElement("String_Node_Str").getElement("String_Node_Str").getAttributeDouble("String_Node_Str") / (24 * 3600);
  }
  double lineTimeInterval=bandElem.getAttributeDouble("String_Node_Str",0);
  final ProductData.UTC startTime=new ProductData.UTC(referenceUTC + firstLineTime);
  final ProductData.UTC stopTime=new ProductData.UTC(referenceUTC + lastLineTime);
  AbstractMetadata.setAttribute(absRoot,AbstractMetadata.first_line_time,startTime);
  AbstractMetadata.setAttribute(absRoot,AbstractMetadata.last_line_time,stopTime);
  product.setStartTime(startTime);
  product.setEndTime(stopTime);
  if (lineTimeInterval == 0) {
    lineTimeInterval=ReaderUtils.getLineTimeInterval(startTime,stopTime,rasterHeight);
  }
  AbstractMetadata.setAttribute(absRoot,AbstractMetadata.line_time_interval,lineTimeInterval);
}

Fixed version (ground truth):
private void addFirstLastLineTimes(final int rasterHeight){
  final MetadataElement absRoot=AbstractMetadata.getAbstractedMetadata(product);
  final MetadataElement root=AbstractMetadata.getOriginalProductMetadata(product);
  final MetadataElement globalElem=root.getElement(NetcdfConstants.GLOBAL_ATTRIBUTES_NAME);
  final MetadataElement bandElem=getBandElement(product.getBandAt(0));
  final double referenceUTC=ReaderUtils.getTime(globalElem,"String_Node_Str",AbstractMetadata.dateFormat).getMJD();
  double firstLineTime=bandElem.getAttributeDouble("String_Node_Str",0) / (24 * 3600);
  if (firstLineTime == 0) {
    final MetadataElement s01Elem=globalElem.getElement("String_Node_Str");
    if (s01Elem != null) {
      firstLineTime=s01Elem.getElement("String_Node_Str").getAttributeDouble("String_Node_Str") / (24 * 3600);
    }
 else {
      firstLineTime=globalElem.getAttributeDouble("String_Node_Str") / (24 * 3600);
    }
  }
  double lastLineTime=bandElem.getAttributeDouble("String_Node_Str",0) / (24 * 3600);
  if (lastLineTime == 0) {
    final MetadataElement s01Elem=globalElem.getElement("String_Node_Str");
    if (s01Elem != null) {
      lastLineTime=s01Elem.getElement("String_Node_Str").getAttributeDouble("String_Node_Str") / (24 * 3600);
    }
 else {
      lastLineTime=globalElem.getAttributeDouble("String_Node_Str") / (24 * 3600);
    }
  }
  double lineTimeInterval=bandElem.getAttributeDouble("String_Node_Str",0);
  final ProductData.UTC startTime=new ProductData.UTC(referenceUTC + firstLineTime);
  final ProductData.UTC stopTime=new ProductData.UTC(referenceUTC + lastLineTime);
  AbstractMetadata.setAttribute(absRoot,AbstractMetadata.first_line_time,startTime);
  AbstractMetadata.setAttribute(absRoot,AbstractMetadata.last_line_time,stopTime);
  product.setStartTime(startTime);
  product.setEndTime(stopTime);
  if (lineTimeInterval == 0) {
    lineTimeInterval=ReaderUtils.getLineTimeInterval(startTime,stopTime,rasterHeight);
  }
  AbstractMetadata.setAttribute(absRoot,AbstractMetadata.line_time_interval,lineTimeInterval);
}