Program: 3421
Project: 3421
Buggy source:
/** 
 * Each submission step must define its own information to be reviewed during the final Review/Verify Step in the submission process. <P> The information to review should be tacked onto the passed in  List object. <P> NOTE: To remain consistent across all Steps, you should first add a sub-List object (with this step's name as the heading), by using a call to reviewList.addList().   This sublist is the list you return from this method!
 * @param reviewList The List to which all reviewable information should be added
 * @return The new sub-List object created by this step, which contains all the reviewable information.  If this step has nothing to review, then return null!   
 */
public List addReviewSection(List reviewList) throws SAXException, WingException, UIException, SQLException, IOException, AuthorizeException {
  List describeSection=reviewList.addList("String_Node_Str" + this.stepAndPage,List.TYPE_FORM);
  describeSection.setHead(T_head);
  DCInputSet inputSet=null;
  try {
    inputSet=getInputsReader().getInputs(submission.getCollection().getHandle());
  }
 catch (  ServletException se) {
    throw new UIException(se);
  }
  DCInput[] inputs=inputSet.getPageRows(getPage() - 1,submission.hasMultipleTitles(),submission.isPublishedBefore());
  for (  DCInput input : inputs) {
    if (!input.isVisible(SCOPE))     continue;
    String inputType=input.getInputType();
    String pairsName=input.getPairsType();
    DCValue[] values=new DCValue[0];
    if (inputType.equals("String_Node_Str")) {
      values=submission.getItem().getMetadata(input.getSchema(),input.getElement(),Item.ANY,Item.ANY);
    }
 else {
      values=submission.getItem().getMetadata(input.getSchema(),input.getElement(),input.getQualifier(),Item.ANY);
    }
    if (values.length == 0) {
      describeSection.addLabel(input.getLabel());
      describeSection.addItem().addHighlight("String_Node_Str").addContent(ReviewStep.T_no_metadata);
    }
 else {
      for (      DCValue value : values) {
        String displayValue=null;
        if (inputType.equals("String_Node_Str")) {
          DCDate date=new DCDate(value.value);
          displayValue=date.toString();
        }
 else         if (inputType.equals("String_Node_Str")) {
          displayValue=input.getDisplayString(pairsName,value.value);
        }
 else         if (inputType.equals("String_Node_Str")) {
          String qualifier=value.qualifier;
          String displayQual=input.getDisplayString(pairsName,qualifier);
          displayValue=displayQual + "String_Node_Str" + value.value;
        }
 else {
          displayValue=value.value;
        }
        describeSection.addLabel(input.getLabel());
        describeSection.addItem(displayValue);
      }
    }
  }
  return describeSection;
}

Fixed version (ground truth):
/** 
 * Each submission step must define its own information to be reviewed during the final Review/Verify Step in the submission process. <P> The information to review should be tacked onto the passed in  List object. <P> NOTE: To remain consistent across all Steps, you should first add a sub-List object (with this step's name as the heading), by using a call to reviewList.addList().   This sublist is the list you return from this method!
 * @param reviewList The List to which all reviewable information should be added
 * @return The new sub-List object created by this step, which contains all the reviewable information.  If this step has nothing to review, then return null!   
 */
public List addReviewSection(List reviewList) throws SAXException, WingException, UIException, SQLException, IOException, AuthorizeException {
  List describeSection=reviewList.addList("String_Node_Str" + this.stepAndPage,List.TYPE_FORM);
  describeSection.setHead(T_head);
  DCInputSet inputSet=null;
  try {
    inputSet=getInputsReader().getInputs(submission.getCollection().getHandle());
  }
 catch (  ServletException se) {
    throw new UIException(se);
  }
  DCInput[] inputs=inputSet.getPageRows(getPage() - 1,submission.hasMultipleTitles(),submission.isPublishedBefore());
  for (  DCInput input : inputs) {
    if (!input.isVisible(submissionInfo.isInWorkflow() ? WORKFLOW_SCOPE : SUBMISSION_SCOPE))     continue;
    String inputType=input.getInputType();
    String pairsName=input.getPairsType();
    DCValue[] values=new DCValue[0];
    if (inputType.equals("String_Node_Str")) {
      values=submission.getItem().getMetadata(input.getSchema(),input.getElement(),Item.ANY,Item.ANY);
    }
 else {
      values=submission.getItem().getMetadata(input.getSchema(),input.getElement(),input.getQualifier(),Item.ANY);
    }
    if (values.length == 0) {
      describeSection.addLabel(input.getLabel());
      describeSection.addItem().addHighlight("String_Node_Str").addContent(ReviewStep.T_no_metadata);
    }
 else {
      for (      DCValue value : values) {
        String displayValue=null;
        if (inputType.equals("String_Node_Str")) {
          DCDate date=new DCDate(value.value);
          displayValue=date.toString();
        }
 else         if (inputType.equals("String_Node_Str")) {
          displayValue=input.getDisplayString(pairsName,value.value);
        }
 else         if (inputType.equals("String_Node_Str")) {
          String qualifier=value.qualifier;
          String displayQual=input.getDisplayString(pairsName,qualifier);
          displayValue=displayQual + "String_Node_Str" + value.value;
        }
 else {
          displayValue=value.value;
        }
        describeSection.addLabel(input.getLabel());
        describeSection.addItem(displayValue);
      }
    }
  }
  return describeSection;
}