Program: 56965
Project: 56965
Buggy source:
private void generateHeader(FacesContext context,DataTable dataTable,ResponseWriter rw) throws IOException {
  rw.startElement("String_Node_Str",dataTable);
  rw.startElement("String_Node_Str",dataTable);
  int index=0;
  List<UIComponent> columns=dataTable.getChildren();
  for (  UIComponent column : columns) {
    if (!column.isRendered()) {
      continue;
    }
    rw.startElement("String_Node_Str",dataTable);
    Object headerStyle=column.getAttributes().get("String_Node_Str");
    if (headerStyle != null) {
      rw.writeAttribute("String_Node_Str",headerStyle,null);
    }
    Object headerStyleClass=column.getAttributes().get("String_Node_Str");
    if (headerStyleClass != null) {
      rw.writeAttribute("String_Node_Str",headerStyleClass,null);
    }
    if (column.getFacet("String_Node_Str") != null) {
      UIComponent facet=column.getFacet("String_Node_Str");
      facet.encodeAll(context);
    }
 else     if (column.getAttributes().get("String_Node_Str") != null) {
      rw.writeText(column.getAttributes().get("String_Node_Str"),null);
    }
 else {
      boolean labelHasBeenRendered=false;
      for (      UIComponent c : column.getChildren()) {
        if (c.getAttributes().get("String_Node_Str") != null) {
          rw.writeText(c.getAttributes().get("String_Node_Str"),null);
          labelHasBeenRendered=true;
          break;
        }
      }
      if (!labelHasBeenRendered) {
        for (        UIComponent c : column.getChildren()) {
          if (c.getAttributes().get("String_Node_Str") != null) {
            rw.writeText(c.getAttributes().get("String_Node_Str"),null);
            labelHasBeenRendered=true;
            break;
          }
        }
      }
      if (!labelHasBeenRendered) {
        ValueExpression ve=column.getValueExpression("String_Node_Str");
        if (null != ve) {
          String exp=ve.getExpressionString();
          int pos=exp.lastIndexOf('.');
          if (pos > 0) {
            exp=exp.substring(pos + 1);
          }
          exp=exp.substring(0,1).toUpperCase() + exp.substring(1);
          rw.writeText(exp.substring(0,exp.length() - 1),null);
          labelHasBeenRendered=true;
        }
      }
      if (!labelHasBeenRendered) {
        rw.writeText("String_Node_Str" + index,null);
      }
    }
    String order=null;
    if (column.getFacet("String_Node_Str") != null) {
      UIComponent facet=column.getFacet("String_Node_Str");
      order=facet.toString();
    }
 else     if (column.getAttributes().get("String_Node_Str") != null) {
      order=(String)column.getAttributes().get("String_Node_Str");
    }
    if (null != order) {
      order=order.trim();
      if ((!"String_Node_Str".equals(order)) && (!"String_Node_Str".equals(order))) {
        throw new FacesException("String_Node_Str");
      }
      Map<Integer,String> columnSortOrder;
      if (dataTable.getColumnSortOrderMap() == null) {
        dataTable.initColumnSortOrderMap();
      }
      columnSortOrder=dataTable.getColumnSortOrderMap();
      columnSortOrder.put(index,order);
    }
    if (column.getAttributes().get("String_Node_Str") != null) {
      String orderBy=(String)column.getAttributes().get("String_Node_Str");
      if (dataTable.getColumnInfo() == null) {
        List<String> infos=new ArrayList<String>(dataTable.getChildren().size());
        for (int k=0; k < dataTable.getChildren().size(); k++) {
          infos.add(null);
        }
        dataTable.setColumnInfo(infos);
      }
      List<String> infos=dataTable.getColumnInfo();
      String s=infos.get(index);
      if (s == null) {
        infos.set(index,"String_Node_Str" + orderBy + "String_Node_Str");
      }
 else {
        infos.set(index,s + "String_Node_Str" + orderBy+ "String_Node_Str");
      }
    }
    if (column.getAttributes().get("String_Node_Str") != null) {
      String type=(String)column.getAttributes().get("String_Node_Str");
      if (dataTable.getColumnInfo() == null) {
        List<String> infos=new ArrayList<String>(dataTable.getChildren().size());
        for (int k=0; k < dataTable.getChildren().size(); k++) {
          infos.add(null);
        }
        dataTable.setColumnInfo(infos);
      }
      List<String> infos=dataTable.getColumnInfo();
      String s=infos.get(index);
      if (s == null) {
        infos.set(index,"String_Node_Str" + type + "String_Node_Str");
      }
 else       infos.set(index,s + "String_Node_Str" + type+ "String_Node_Str");
    }
    if (column.getAttributes().get("String_Node_Str") != null) {
      String orderable=column.getAttributes().get("String_Node_Str").toString();
      if ("String_Node_Str".equalsIgnoreCase(orderable)) {
        if (dataTable.getColumnInfo() == null) {
          List<String> infos=new ArrayList<String>(dataTable.getChildren().size());
          for (int k=0; k < dataTable.getChildren().size(); k++) {
            infos.add(null);
          }
          dataTable.setColumnInfo(infos);
        }
        List<String> infos=dataTable.getColumnInfo();
        String s=infos.get(index);
        if (s == null) {
          infos.set(index,"String_Node_Str");
        }
 else         infos.set(index,s + "String_Node_Str");
      }
    }
    rw.endElement("String_Node_Str");
    index++;
  }
  rw.endElement("String_Node_Str");
  if (false) {
  }
  rw.endElement("String_Node_Str");
}

Fixed version (ground truth):
private void generateHeader(FacesContext context,DataTable dataTable,ResponseWriter rw) throws IOException {
  rw.startElement("String_Node_Str",dataTable);
  rw.startElement("String_Node_Str",dataTable);
  int index=0;
  List<UIComponent> columns=dataTable.getChildren();
  for (  UIComponent column : columns) {
    if (!column.isRendered()) {
      continue;
    }
    rw.startElement("String_Node_Str",dataTable);
    Object headerStyle=column.getAttributes().get("String_Node_Str");
    if (headerStyle != null) {
      rw.writeAttribute("String_Node_Str",headerStyle,null);
    }
    Object headerStyleClass=column.getAttributes().get("String_Node_Str");
    if (headerStyleClass != null) {
      rw.writeAttribute("String_Node_Str",headerStyleClass,null);
    }
    if (column.getFacet("String_Node_Str") != null) {
      UIComponent facet=column.getFacet("String_Node_Str");
      facet.encodeAll(context);
    }
 else     if (column.getAttributes().get("String_Node_Str") != null) {
      rw.writeText(column.getAttributes().get("String_Node_Str"),null);
    }
 else {
      boolean labelHasBeenRendered=false;
      for (      UIComponent c : column.getChildren()) {
        if (c.getAttributes().get("String_Node_Str") != null) {
          rw.writeText(c.getAttributes().get("String_Node_Str"),null);
          labelHasBeenRendered=true;
          break;
        }
      }
      if (!labelHasBeenRendered) {
        for (        UIComponent c : column.getChildren()) {
          if (c.getAttributes().get("String_Node_Str") != null) {
            rw.writeText(c.getAttributes().get("String_Node_Str"),null);
            labelHasBeenRendered=true;
            break;
          }
        }
      }
      if (!labelHasBeenRendered) {
        ValueExpression ve=column.getValueExpression("String_Node_Str");
        if (null != ve) {
          String exp=ve.getExpressionString();
          int pos=exp.lastIndexOf('.');
          if (pos > 0) {
            exp=exp.substring(pos + 1);
          }
          exp=exp.substring(0,1).toUpperCase() + exp.substring(1);
          rw.writeText(exp.substring(0,exp.length() - 1),null);
          labelHasBeenRendered=true;
        }
      }
      if (!labelHasBeenRendered) {
        rw.writeText("String_Node_Str" + index,null);
      }
    }
    String order=null;
    if (column.getFacet("String_Node_Str") != null) {
      UIComponent facet=column.getFacet("String_Node_Str");
      order=facet.toString();
    }
 else     if (column.getAttributes().get("String_Node_Str") != null) {
      order=(String)column.getAttributes().get("String_Node_Str");
    }
    if (null != order) {
      order=order.trim();
      if ((!"String_Node_Str".equals(order)) && (!"String_Node_Str".equals(order))) {
        throw new FacesException("String_Node_Str");
      }
      Map<Integer,String> columnSortOrder;
      if (dataTable.getColumnSortOrderMap() == null) {
        dataTable.initColumnSortOrderMap();
      }
      columnSortOrder=dataTable.getColumnSortOrderMap();
      columnSortOrder.put(index,order);
    }
    if (column.getAttributes().get("String_Node_Str") != null) {
      String orderBy=(String)column.getAttributes().get("String_Node_Str");
      if (dataTable.getColumnInfo() == null) {
        List<String> infos=new ArrayList<String>(dataTable.getChildren().size());
        for (int k=0; k < dataTable.getChildren().size(); k++) {
          infos.add(null);
        }
        dataTable.setColumnInfo(infos);
      }
      List<String> infos=dataTable.getColumnInfo();
      String s=infos.get(index);
      if (s == null) {
        infos.set(index,"String_Node_Str" + orderBy + "String_Node_Str");
      }
 else {
        infos.set(index,s + "String_Node_Str" + orderBy+ "String_Node_Str");
      }
    }
    if (column.getAttributes().get("String_Node_Str") != null) {
      String type=(String)column.getAttributes().get("String_Node_Str");
      if (dataTable.getColumnInfo() == null) {
        List<String> infos=new ArrayList<String>(dataTable.getChildren().size());
        for (int k=0; k < dataTable.getChildren().size(); k++) {
          infos.add(null);
        }
        dataTable.setColumnInfo(infos);
      }
      List<String> infos=dataTable.getColumnInfo();
      String s=infos.get(index);
      if (s == null) {
        infos.set(index,"String_Node_Str" + type + "String_Node_Str");
      }
 else       infos.set(index,s + "String_Node_Str" + type+ "String_Node_Str");
    }
    if (column.getAttributes().get("String_Node_Str") != null) {
      String orderable=column.getAttributes().get("String_Node_Str").toString();
      if ("String_Node_Str".equalsIgnoreCase(orderable)) {
        if (dataTable.getColumnInfo() == null) {
          List<String> infos=new ArrayList<String>(dataTable.getChildren().size());
          for (int k=0; k < dataTable.getChildren().size(); k++) {
            infos.add(null);
          }
          dataTable.setColumnInfo(infos);
        }
        List<String> infos=dataTable.getColumnInfo();
        String s=infos.get(index);
        if (s == null) {
          infos.set(index,"String_Node_Str");
        }
 else         infos.set(index,s + "String_Node_Str");
      }
    }
    if (column.getAttributes().get("String_Node_Str") != null) {
      String customOptions=column.getAttributes().get("String_Node_Str").toString();
      if (customOptions != null && customOptions.length() > 0) {
        if (dataTable.getColumnInfo() == null) {
          List<String> infos=new ArrayList<String>(dataTable.getChildren().size());
          for (int k=0; k < dataTable.getChildren().size(); k++) {
            infos.add(null);
          }
          dataTable.setColumnInfo(infos);
        }
        List<String> infos=dataTable.getColumnInfo();
        String s=infos.get(index);
        if (s == null) {
          infos.set(index,customOptions);
        }
 else         infos.set(index,s + "String_Node_Str" + customOptions);
      }
    }
    rw.endElement("String_Node_Str");
    index++;
  }
  rw.endElement("String_Node_Str");
  if (false) {
  }
  rw.endElement("String_Node_Str");
}