Program: 3423
Project: 3423
Buggy source:
public int doStartTag() throws JspException {
  JspWriter out=pageContext.getOut();
  HttpServletRequest hrq=(HttpServletRequest)pageContext.getRequest();
  boolean emphasiseDate=false;
  boolean emphasiseTitle=false;
  if (emphColumn != null) {
    emphasiseDate=emphColumn.equalsIgnoreCase("String_Node_Str");
    emphasiseTitle=emphColumn.equalsIgnoreCase("String_Node_Str");
  }
  String configLine=null;
  String widthLine=null;
  if (sortOption != null) {
    if (configLine == null) {
      configLine=ConfigurationManager.getProperty("String_Node_Str" + sortOption.getName() + "String_Node_Str");
      widthLine=ConfigurationManager.getProperty("String_Node_Str" + sortOption.getName() + "String_Node_Str");
    }
    if (configLine == null) {
      configLine=ConfigurationManager.getProperty("String_Node_Str" + sortOption.getName() + "String_Node_Str");
      widthLine=ConfigurationManager.getProperty("String_Node_Str" + sortOption.getName() + "String_Node_Str");
    }
  }
  if (configLine == null) {
    configLine=ConfigurationManager.getProperty("String_Node_Str");
    widthLine=ConfigurationManager.getProperty("String_Node_Str");
  }
  if (configLine != null) {
    if (!showThumbs && configLine.contains("String_Node_Str")) {
      configLine=configLine == null ? "String_Node_Str" : configLine;
      widthLine=widthLine == null ? "String_Node_Str" : widthLine;
      StringTokenizer llt=new StringTokenizer(configLine,"String_Node_Str");
      StringTokenizer wlt=new StringTokenizer(widthLine,"String_Node_Str");
      StringBuilder newLLine=new StringBuilder();
      StringBuilder newWLine=new StringBuilder();
      while (llt.hasMoreTokens() && wlt.hasMoreTokens()) {
        String listTok=llt.hasMoreTokens() ? llt.nextToken() : null;
        String widthTok=wlt.hasMoreTokens() ? wlt.nextToken() : null;
        if (listTok == null || !listTok.trim().equals("String_Node_Str")) {
          if (listTok != null) {
            if (newLLine.length() > 0)             newLLine.append("String_Node_Str");
            newLLine.append(listTok);
          }
          if (widthTok != null) {
            if (newWLine.length() > 0)             newWLine.append("String_Node_Str");
            newWLine.append(widthTok);
          }
        }
      }
      configLine=newLLine.toString();
      widthLine=newWLine.toString();
    }
    listFields=configLine;
    listWidths=widthLine;
  }
  String dateLine=ConfigurationManager.getProperty("String_Node_Str");
  if (dateLine != null) {
    dateField=dateLine;
  }
  String titleLine=ConfigurationManager.getProperty("String_Node_Str");
  if (titleLine != null) {
    titleField=titleLine;
  }
  String authorLine=ConfigurationManager.getProperty("String_Node_Str");
  if (authorLine != null) {
    authorField=authorLine;
  }
  String[] fieldArr=listFields.split("String_Node_Str");
  String[] widthArr=listWidths == null ? new String[0] : listWidths.split("String_Node_Str");
  boolean isDate[]=new boolean[fieldArr.length];
  boolean emph[]=new boolean[fieldArr.length];
  boolean isAuthor[]=new boolean[fieldArr.length];
  boolean viewFull[]=new boolean[fieldArr.length];
  String[] browseType=new String[fieldArr.length];
  String[] cOddOrEven=new String[fieldArr.length];
  try {
    CrossLinks cl=new CrossLinks();
    String tablewidth=ConfigurationManager.getProperty("String_Node_Str");
    if (widthArr.length > 0 && widthArr.length == fieldArr.length && !linkToEdit) {
      if (!StringUtils.isEmpty(tablewidth)) {
        out.println("String_Node_Str" + tablewidth + "String_Node_Str");
      }
 else {
        out.println("String_Node_Str");
      }
      out.print("String_Node_Str");
      for (int w=0; w < widthArr.length; w++) {
        out.print("String_Node_Str");
        if (fieldArr[w].equals("String_Node_Str") && widthArr[w].equals("String_Node_Str")) {
          out.print(thumbItemListMaxWidth);
        }
 else {
          out.print(StringUtils.isEmpty(widthArr[w]) ? "String_Node_Str" : widthArr[w]);
        }
        out.print("String_Node_Str");
      }
      out.println("String_Node_Str");
    }
 else     if (!StringUtils.isEmpty(tablewidth)) {
      out.println("String_Node_Str" + tablewidth + "String_Node_Str");
    }
 else {
      out.println("String_Node_Str");
    }
    out.println("String_Node_Str");
    for (int colIdx=0; colIdx < fieldArr.length; colIdx++) {
      String field=fieldArr[colIdx].toLowerCase().trim();
      cOddOrEven[colIdx]=(((colIdx + 1) % 2) == 0 ? "String_Node_Str" : "String_Node_Str");
      if (field.indexOf("String_Node_Str") > 0) {
        field=field.replaceAll("String_Node_Str","String_Node_Str");
        isDate[colIdx]=true;
      }
      fieldArr[colIdx]=field;
      if (field.equals(authorField)) {
        isAuthor[colIdx]=true;
      }
      if (cl.hasLink(field)) {
        browseType[colIdx]=cl.getLinkType(field);
        viewFull[colIdx]=BrowseIndex.getBrowseIndex(browseType[colIdx]).isItemIndex();
      }
      if (field.equals(emphColumn)) {
        emph[colIdx]=true;
      }
 else       if ((field.equals(dateField) && emphasiseDate) || (field.equals(titleField) && emphasiseTitle)) {
        emph[colIdx]=true;
      }
      String id="String_Node_Str" + Integer.toString(colIdx + 1);
      String css="String_Node_Str" + cOddOrEven[colIdx] + "String_Node_Str";
      String message="String_Node_Str" + field;
      out.print("String_Node_Str" + id + "String_Node_Str"+ css+ "String_Node_Str"+ (emph[colIdx] ? "String_Node_Str" : "String_Node_Str")+ LocaleSupport.getLocalizedMessage(pageContext,message)+ (emph[colIdx] ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str");
    }
    if (linkToEdit) {
      String id="String_Node_Str" + Integer.toString(cOddOrEven.length + 1);
      String css="String_Node_Str" + cOddOrEven[cOddOrEven.length - 2] + "String_Node_Str";
      out.print("String_Node_Str" + id + "String_Node_Str"+ css+ "String_Node_Str"+ (emph[emph.length - 2] ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str"+ (emph[emph.length - 2] ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str");
    }
    out.print("String_Node_Str");
    for (int i=0; i < items.length; i++) {
      String rOddOrEven;
      if (i == highlightRow) {
        rOddOrEven="String_Node_Str";
      }
 else {
        rOddOrEven=((i % 2) == 1 ? "String_Node_Str" : "String_Node_Str");
      }
      for (int colIdx=0; colIdx < fieldArr.length; colIdx++) {
        String field=fieldArr[colIdx];
        StringTokenizer eq=new StringTokenizer(field,"String_Node_Str");
        String[] tokens={"String_Node_Str","String_Node_Str","String_Node_Str"};
        int k=0;
        while (eq.hasMoreTokens()) {
          tokens[k]=eq.nextToken().toLowerCase().trim();
          k++;
        }
        String schema=tokens[0];
        String element=tokens[1];
        String qualifier=tokens[2];
        DCValue[] metadataArray;
        if (qualifier.equals("String_Node_Str")) {
          metadataArray=items[i].getMetadata(schema,element,Item.ANY,Item.ANY);
        }
 else         if (qualifier.equals("String_Node_Str")) {
          metadataArray=items[i].getMetadata(schema,element,null,Item.ANY);
        }
 else {
          metadataArray=items[i].getMetadata(schema,element,qualifier,Item.ANY);
        }
        if (metadataArray == null) {
          metadataArray=new DCValue[0];
        }
        String metadata="String_Node_Str";
        if (field.equals("String_Node_Str")) {
          metadata=getThumbMarkup(hrq,items[i]);
        }
        if (metadataArray.length > 0) {
          if (isDate[colIdx]) {
            DCDate dd=new DCDate(metadataArray[0].value);
            metadata=UIUtil.displayDate(dd,false,false,hrq);
          }
 else           if (field.equals(titleField) && items[i].isWithdrawn()) {
            metadata=Utils.addEntities(metadataArray[0].value);
          }
 else           if (field.equals(titleField)) {
            metadata="String_Node_Str" + hrq.getContextPath() + "String_Node_Str"+ items[i].getHandle()+ "String_Node_Str"+ Utils.addEntities(metadataArray[0].value)+ "String_Node_Str";
          }
 else {
            boolean truncated=false;
            int loopLimit=metadataArray.length;
            if (isAuthor[colIdx]) {
              int fieldMax=(authorLimit > 0 ? authorLimit : metadataArray.length);
              loopLimit=(fieldMax > metadataArray.length ? metadataArray.length : fieldMax);
              truncated=(fieldMax < metadataArray.length);
              log.debug("String_Node_Str" + field + "String_Node_Str"+ Integer.toString(loopLimit)+ "String_Node_Str"+ Integer.toString(metadataArray.length));
            }
            StringBuffer sb=new StringBuffer();
            for (int j=0; j < loopLimit; j++) {
              String startLink="String_Node_Str";
              String endLink="String_Node_Str";
              if (!StringUtils.isEmpty(browseType[colIdx]) && !disableCrossLinks) {
                String argument="String_Node_Str";
                if (viewFull[colIdx]) {
                  argument="String_Node_Str";
                }
                startLink="String_Node_Str" + hrq.getContextPath() + "String_Node_Str"+ browseType[colIdx]+ "String_Node_Str"+ argument+ "String_Node_Str"+ Utils.addEntities(metadataArray[j].value);
                if (metadataArray[j].language != null) {
                  startLink=startLink + "String_Node_Str" + argument+ "String_Node_Str"+ Utils.addEntities(metadataArray[j].language)+ "String_Node_Str";
                }
 else {
                  startLink=startLink + "String_Node_Str";
                }
                endLink="String_Node_Str";
              }
              sb.append(startLink);
              sb.append(Utils.addEntities(metadataArray[j].value));
              sb.append(endLink);
              if (j < (loopLimit - 1)) {
                sb.append("String_Node_Str");
              }
            }
            if (truncated) {
              String etal=LocaleSupport.getLocalizedMessage(pageContext,"String_Node_Str");
              sb.append("String_Node_Str" + etal);
            }
            metadata="String_Node_Str" + sb.toString() + "String_Node_Str";
          }
        }
        String extras="String_Node_Str";
        if (isDate[colIdx]) {
          extras="String_Node_Str";
        }
        String id="String_Node_Str" + Integer.toString(colIdx + 1);
        out.print("String_Node_Str" + id + "String_Node_Str"+ rOddOrEven+ "String_Node_Str"+ cOddOrEven[colIdx]+ "String_Node_Str"+ extras+ "String_Node_Str"+ (emph[colIdx] ? "String_Node_Str" : "String_Node_Str")+ metadata+ (emph[colIdx] ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str");
      }
      if (linkToEdit) {
        String id="String_Node_Str" + Integer.toString(cOddOrEven.length + 1);
        out.print("String_Node_Str" + id + "String_Node_Str"+ rOddOrEven+ "String_Node_Str"+ cOddOrEven[cOddOrEven.length - 2]+ "String_Node_Str"+ "String_Node_Str"+ hrq.getContextPath()+ "String_Node_Str"+ "String_Node_Str"+ items[i].getHandle()+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
      }
      out.println("String_Node_Str");
    }
    out.println("String_Node_Str");
  }
 catch (  IOException ie) {
    throw new JspException(ie);
  }
catch (  BrowseException e) {
    throw new JspException(e);
  }
  return SKIP_BODY;
}

Fixed version (ground truth):
public int doStartTag() throws JspException {
  JspWriter out=pageContext.getOut();
  HttpServletRequest hrq=(HttpServletRequest)pageContext.getRequest();
  boolean emphasiseDate=false;
  boolean emphasiseTitle=false;
  if (emphColumn != null) {
    emphasiseDate=emphColumn.equalsIgnoreCase("String_Node_Str");
    emphasiseTitle=emphColumn.equalsIgnoreCase("String_Node_Str");
  }
  String configLine=null;
  String widthLine=null;
  if (sortOption != null) {
    if (configLine == null) {
      configLine=ConfigurationManager.getProperty("String_Node_Str" + sortOption.getName() + "String_Node_Str");
      widthLine=ConfigurationManager.getProperty("String_Node_Str" + sortOption.getName() + "String_Node_Str");
    }
    if (configLine == null) {
      configLine=ConfigurationManager.getProperty("String_Node_Str" + sortOption.getName() + "String_Node_Str");
      widthLine=ConfigurationManager.getProperty("String_Node_Str" + sortOption.getName() + "String_Node_Str");
    }
  }
  if (configLine == null) {
    configLine=ConfigurationManager.getProperty("String_Node_Str");
    widthLine=ConfigurationManager.getProperty("String_Node_Str");
  }
  if (configLine != null) {
    if (!showThumbs && configLine.contains("String_Node_Str")) {
      configLine=configLine == null ? "String_Node_Str" : configLine;
      widthLine=widthLine == null ? "String_Node_Str" : widthLine;
      StringTokenizer llt=new StringTokenizer(configLine,"String_Node_Str");
      StringTokenizer wlt=new StringTokenizer(widthLine,"String_Node_Str");
      StringBuilder newLLine=new StringBuilder();
      StringBuilder newWLine=new StringBuilder();
      while (llt.hasMoreTokens() || wlt.hasMoreTokens()) {
        String listTok=llt.hasMoreTokens() ? llt.nextToken() : null;
        String widthTok=wlt.hasMoreTokens() ? wlt.nextToken() : null;
        if (listTok == null || !listTok.trim().equals("String_Node_Str")) {
          if (listTok != null) {
            if (newLLine.length() > 0)             newLLine.append("String_Node_Str");
            newLLine.append(listTok);
          }
          if (widthTok != null) {
            if (newWLine.length() > 0)             newWLine.append("String_Node_Str");
            newWLine.append(widthTok);
          }
        }
      }
      configLine=newLLine.toString();
      widthLine=newWLine.toString();
    }
    listFields=configLine;
    listWidths=widthLine;
  }
  String dateLine=ConfigurationManager.getProperty("String_Node_Str");
  if (dateLine != null) {
    dateField=dateLine;
  }
  String titleLine=ConfigurationManager.getProperty("String_Node_Str");
  if (titleLine != null) {
    titleField=titleLine;
  }
  String authorLine=ConfigurationManager.getProperty("String_Node_Str");
  if (authorLine != null) {
    authorField=authorLine;
  }
  String[] fieldArr=listFields.split("String_Node_Str");
  String[] widthArr=listWidths == null ? new String[0] : listWidths.split("String_Node_Str");
  boolean isDate[]=new boolean[fieldArr.length];
  boolean emph[]=new boolean[fieldArr.length];
  boolean isAuthor[]=new boolean[fieldArr.length];
  boolean viewFull[]=new boolean[fieldArr.length];
  String[] browseType=new String[fieldArr.length];
  String[] cOddOrEven=new String[fieldArr.length];
  try {
    CrossLinks cl=new CrossLinks();
    String tablewidth=ConfigurationManager.getProperty("String_Node_Str");
    if (widthArr.length > 0 && widthArr.length == fieldArr.length && !linkToEdit) {
      if (!StringUtils.isEmpty(tablewidth)) {
        out.println("String_Node_Str" + tablewidth + "String_Node_Str");
      }
 else {
        out.println("String_Node_Str");
      }
      out.print("String_Node_Str");
      for (int w=0; w < widthArr.length; w++) {
        out.print("String_Node_Str");
        if (fieldArr[w].equals("String_Node_Str") && widthArr[w].equals("String_Node_Str")) {
          out.print(thumbItemListMaxWidth);
        }
 else {
          out.print(StringUtils.isEmpty(widthArr[w]) ? "String_Node_Str" : widthArr[w]);
        }
        out.print("String_Node_Str");
      }
      out.println("String_Node_Str");
    }
 else     if (!StringUtils.isEmpty(tablewidth)) {
      out.println("String_Node_Str" + tablewidth + "String_Node_Str");
    }
 else {
      out.println("String_Node_Str");
    }
    out.println("String_Node_Str");
    for (int colIdx=0; colIdx < fieldArr.length; colIdx++) {
      String field=fieldArr[colIdx].toLowerCase().trim();
      cOddOrEven[colIdx]=(((colIdx + 1) % 2) == 0 ? "String_Node_Str" : "String_Node_Str");
      if (field.indexOf("String_Node_Str") > 0) {
        field=field.replaceAll("String_Node_Str","String_Node_Str");
        isDate[colIdx]=true;
      }
      fieldArr[colIdx]=field;
      if (field.equals(authorField)) {
        isAuthor[colIdx]=true;
      }
      if (cl.hasLink(field)) {
        browseType[colIdx]=cl.getLinkType(field);
        viewFull[colIdx]=BrowseIndex.getBrowseIndex(browseType[colIdx]).isItemIndex();
      }
      if (field.equals(emphColumn)) {
        emph[colIdx]=true;
      }
 else       if ((field.equals(dateField) && emphasiseDate) || (field.equals(titleField) && emphasiseTitle)) {
        emph[colIdx]=true;
      }
      String id="String_Node_Str" + Integer.toString(colIdx + 1);
      String css="String_Node_Str" + cOddOrEven[colIdx] + "String_Node_Str";
      String message="String_Node_Str" + field;
      out.print("String_Node_Str" + id + "String_Node_Str"+ css+ "String_Node_Str"+ (emph[colIdx] ? "String_Node_Str" : "String_Node_Str")+ LocaleSupport.getLocalizedMessage(pageContext,message)+ (emph[colIdx] ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str");
    }
    if (linkToEdit) {
      String id="String_Node_Str" + Integer.toString(cOddOrEven.length + 1);
      String css="String_Node_Str" + cOddOrEven[cOddOrEven.length - 2] + "String_Node_Str";
      out.print("String_Node_Str" + id + "String_Node_Str"+ css+ "String_Node_Str"+ (emph[emph.length - 2] ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str"+ (emph[emph.length - 2] ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str");
    }
    out.print("String_Node_Str");
    for (int i=0; i < items.length; i++) {
      String rOddOrEven;
      if (i == highlightRow) {
        rOddOrEven="String_Node_Str";
      }
 else {
        rOddOrEven=((i % 2) == 1 ? "String_Node_Str" : "String_Node_Str");
      }
      for (int colIdx=0; colIdx < fieldArr.length; colIdx++) {
        String field=fieldArr[colIdx];
        StringTokenizer eq=new StringTokenizer(field,"String_Node_Str");
        String[] tokens={"String_Node_Str","String_Node_Str","String_Node_Str"};
        int k=0;
        while (eq.hasMoreTokens()) {
          tokens[k]=eq.nextToken().toLowerCase().trim();
          k++;
        }
        String schema=tokens[0];
        String element=tokens[1];
        String qualifier=tokens[2];
        DCValue[] metadataArray;
        if (qualifier.equals("String_Node_Str")) {
          metadataArray=items[i].getMetadata(schema,element,Item.ANY,Item.ANY);
        }
 else         if (qualifier.equals("String_Node_Str")) {
          metadataArray=items[i].getMetadata(schema,element,null,Item.ANY);
        }
 else {
          metadataArray=items[i].getMetadata(schema,element,qualifier,Item.ANY);
        }
        if (metadataArray == null) {
          metadataArray=new DCValue[0];
        }
        String metadata="String_Node_Str";
        if (field.equals("String_Node_Str")) {
          metadata=getThumbMarkup(hrq,items[i]);
        }
        if (metadataArray.length > 0) {
          if (isDate[colIdx]) {
            DCDate dd=new DCDate(metadataArray[0].value);
            metadata=UIUtil.displayDate(dd,false,false,hrq);
          }
 else           if (field.equals(titleField) && items[i].isWithdrawn()) {
            metadata=Utils.addEntities(metadataArray[0].value);
          }
 else           if (field.equals(titleField)) {
            metadata="String_Node_Str" + hrq.getContextPath() + "String_Node_Str"+ items[i].getHandle()+ "String_Node_Str"+ Utils.addEntities(metadataArray[0].value)+ "String_Node_Str";
          }
 else {
            boolean truncated=false;
            int loopLimit=metadataArray.length;
            if (isAuthor[colIdx]) {
              int fieldMax=(authorLimit > 0 ? authorLimit : metadataArray.length);
              loopLimit=(fieldMax > metadataArray.length ? metadataArray.length : fieldMax);
              truncated=(fieldMax < metadataArray.length);
              log.debug("String_Node_Str" + field + "String_Node_Str"+ Integer.toString(loopLimit)+ "String_Node_Str"+ Integer.toString(metadataArray.length));
            }
            StringBuffer sb=new StringBuffer();
            for (int j=0; j < loopLimit; j++) {
              String startLink="String_Node_Str";
              String endLink="String_Node_Str";
              if (!StringUtils.isEmpty(browseType[colIdx]) && !disableCrossLinks) {
                String argument="String_Node_Str";
                if (viewFull[colIdx]) {
                  argument="String_Node_Str";
                }
                startLink="String_Node_Str" + hrq.getContextPath() + "String_Node_Str"+ browseType[colIdx]+ "String_Node_Str"+ argument+ "String_Node_Str"+ Utils.addEntities(metadataArray[j].value);
                if (metadataArray[j].language != null) {
                  startLink=startLink + "String_Node_Str" + argument+ "String_Node_Str"+ Utils.addEntities(metadataArray[j].language)+ "String_Node_Str";
                }
 else {
                  startLink=startLink + "String_Node_Str";
                }
                endLink="String_Node_Str";
              }
              sb.append(startLink);
              sb.append(Utils.addEntities(metadataArray[j].value));
              sb.append(endLink);
              if (j < (loopLimit - 1)) {
                sb.append("String_Node_Str");
              }
            }
            if (truncated) {
              String etal=LocaleSupport.getLocalizedMessage(pageContext,"String_Node_Str");
              sb.append("String_Node_Str" + etal);
            }
            metadata="String_Node_Str" + sb.toString() + "String_Node_Str";
          }
        }
        String extras="String_Node_Str";
        if (isDate[colIdx]) {
          extras="String_Node_Str";
        }
        String id="String_Node_Str" + Integer.toString(colIdx + 1);
        out.print("String_Node_Str" + id + "String_Node_Str"+ rOddOrEven+ "String_Node_Str"+ cOddOrEven[colIdx]+ "String_Node_Str"+ extras+ "String_Node_Str"+ (emph[colIdx] ? "String_Node_Str" : "String_Node_Str")+ metadata+ (emph[colIdx] ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str");
      }
      if (linkToEdit) {
        String id="String_Node_Str" + Integer.toString(cOddOrEven.length + 1);
        out.print("String_Node_Str" + id + "String_Node_Str"+ rOddOrEven+ "String_Node_Str"+ cOddOrEven[cOddOrEven.length - 2]+ "String_Node_Str"+ "String_Node_Str"+ hrq.getContextPath()+ "String_Node_Str"+ "String_Node_Str"+ items[i].getHandle()+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
      }
      out.println("String_Node_Str");
    }
    out.println("String_Node_Str");
  }
 catch (  IOException ie) {
    throw new JspException(ie);
  }
catch (  BrowseException e) {
    throw new JspException(e);
  }
  return SKIP_BODY;
}