Program: 24737
Project: 24737
Buggy source:
/** 
 * Checks if step mode is active and in the setup phase. If so, outputs the frameset and information frames.
 * @param req            The HTTP request (in)
 * @param res            The HTTP response (out)
 * @return A string to output if in step setup phase, null to do normal processing
 */
protected String stepSetup(HttpServletRequest req,HttpServletResponse res) throws IOException {
  String baseUrl=res.encodeURL(getRequestURL(req));
  String step=req.getParameter("String_Node_Str");
  if (step == null || step.length() == 0)   return null;
  if (step.matches("String_Node_Str")) {
    String urlA=baseUrl.replaceAll("String_Node_Str" + step,"String_Node_Str" + step + "String_Node_Str");
    String urlB=baseUrl.replaceAll("String_Node_Str" + step,"String_Node_Str" + step + "String_Node_Str");
    return "String_Node_Str" + "String_Node_Str" + "String_Node_Str" + step + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ urlA+ "String_Node_Str"+ "String_Node_Str"+ urlB+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str";
  }
  if (step.matches("String_Node_Str")) {
    int stepNum=Integer.parseInt(step.substring(0,1));
    StringBuffer out=new StringBuffer();
    out.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str" + stepNum + "String_Node_Str");
    String prevUrl=(stepNum == 1) ? null : baseUrl.replaceAll("String_Node_Str" + step,"String_Node_Str" + (stepNum - 1));
    String nextUrl=(stepNum == 5) ? null : baseUrl.replaceAll("String_Node_Str" + step,"String_Node_Str" + (stepNum + 1));
    if (stepNum > 1)     out.append("String_Node_Str" + prevUrl + "String_Node_Str");
 else     out.append("String_Node_Str");
    if (stepNum < 5)     out.append("String_Node_Str" + nextUrl + "String_Node_Str");
 else     out.append("String_Node_Str");
    out.append("String_Node_Str" + "String_Node_Str");
    for (int i=1; i <= 5; i++) {
      if (i == stepNum)       out.append("String_Node_Str");
 else       out.append("String_Node_Str");
      if (i != stepNum) {
        String link=baseUrl.replaceAll("String_Node_Str" + step,"String_Node_Str" + i);
        out.append("String_Node_Str" + link + "String_Node_Str");
      }
      out.append("String_Node_Str" + i + "String_Node_Str");
      if (i != stepNum)       out.append("String_Node_Str");
switch (i) {
case 1:
        out.append("String_Node_Str");
      break;
case 2:
    out.append("String_Node_Str");
  break;
case 3:
out.append("String_Node_Str");
break;
case 4:
out.append("String_Node_Str");
break;
case 5:
out.append("String_Node_Str");
break;
}
out.append("String_Node_Str");
if (i < 5) {
out.append("String_Node_Str");
switch (i) {
case 1:
out.append("String_Node_Str");
break;
case 2:
out.append("String_Node_Str");
break;
case 3:
out.append("String_Node_Str");
break;
case 4:
out.append("String_Node_Str");
break;
}
out.append("String_Node_Str");
}
if (i == stepNum) out.append("String_Node_Str");
out.append("String_Node_Str");
}
out.append("String_Node_Str" + "String_Node_Str");
switch (stepNum) {
case 1:
if (config.queryRouterSheet == null) {
out.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str" + config.queryParserSheet + "String_Node_Str"+ "String_Node_Str"+ nextUrl+ "String_Node_Str");
break;
}
out.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str" + config.queryRouterSheet + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ nextUrl+ "String_Node_Str");
break;
case 2:
out.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str" + nextUrl + "String_Node_Str");
break;
case 3:
out.append("String_Node_Str" + "String_Node_Str" + prevUrl + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ nextUrl+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
break;
case 4:
out.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str" + prevUrl + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ nextUrl+ "String_Node_Str");
break;
case 5:
out.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str" + prevUrl + "String_Node_Str"+ "String_Node_Str");
}
out.append("String_Node_Str" + "String_Node_Str");
return out.toString();
}
return null;
}

Fixed version (ground truth):
/** 
 * Checks if step mode is active and in the setup phase. If so, outputs the frameset and information frames.
 * @param req            The HTTP request (in)
 * @param res            The HTTP response (out)
 * @return A string to output if in step setup phase, null to do normal processing
 */
protected String stepSetup(HttpServletRequest req,HttpServletResponse res) throws IOException {
  String baseUrl=res.encodeURL(getRequestURL(req));
  baseUrl=baseUrl.replaceAll("String_Node_Str","String_Node_Str");
  String step=req.getParameter("String_Node_Str");
  if (step == null || step.length() == 0)   return null;
  if (step.matches("String_Node_Str")) {
    String urlA=baseUrl.replaceAll("String_Node_Str" + step,"String_Node_Str" + step + "String_Node_Str");
    String urlB=baseUrl.replaceAll("String_Node_Str" + step,"String_Node_Str" + step + "String_Node_Str");
    return "String_Node_Str" + "String_Node_Str" + "String_Node_Str" + step + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ urlA+ "String_Node_Str"+ "String_Node_Str"+ urlB+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str";
  }
  if (step.matches("String_Node_Str")) {
    int stepNum=Integer.parseInt(step.substring(0,1));
    StringBuffer out=new StringBuffer();
    out.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str" + stepNum + "String_Node_Str");
    String prevUrl=(stepNum == 1) ? null : baseUrl.replaceAll("String_Node_Str" + step,"String_Node_Str" + (stepNum - 1));
    String nextUrl=(stepNum == 5) ? null : baseUrl.replaceAll("String_Node_Str" + step,"String_Node_Str" + (stepNum + 1));
    if (stepNum > 1)     out.append("String_Node_Str" + prevUrl + "String_Node_Str");
 else     out.append("String_Node_Str");
    if (stepNum < 5)     out.append("String_Node_Str" + nextUrl + "String_Node_Str");
 else     out.append("String_Node_Str");
    out.append("String_Node_Str" + "String_Node_Str");
    for (int i=1; i <= 5; i++) {
      if (i == stepNum)       out.append("String_Node_Str");
 else       out.append("String_Node_Str");
      if (i != stepNum) {
        String link=baseUrl.replaceAll("String_Node_Str" + step,"String_Node_Str" + i);
        out.append("String_Node_Str" + link + "String_Node_Str");
      }
      out.append("String_Node_Str" + i + "String_Node_Str");
      if (i != stepNum)       out.append("String_Node_Str");
switch (i) {
case 1:
        out.append("String_Node_Str");
      break;
case 2:
    out.append("String_Node_Str");
  break;
case 3:
out.append("String_Node_Str");
break;
case 4:
out.append("String_Node_Str");
break;
case 5:
out.append("String_Node_Str");
break;
}
out.append("String_Node_Str");
if (i < 5) {
out.append("String_Node_Str");
switch (i) {
case 1:
out.append("String_Node_Str");
break;
case 2:
out.append("String_Node_Str");
break;
case 3:
out.append("String_Node_Str");
break;
case 4:
out.append("String_Node_Str");
break;
}
out.append("String_Node_Str");
}
if (i == stepNum) out.append("String_Node_Str");
out.append("String_Node_Str");
}
out.append("String_Node_Str" + "String_Node_Str");
switch (stepNum) {
case 1:
if (config.queryRouterSheet == null) {
out.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str" + config.queryParserSheet + "String_Node_Str"+ "String_Node_Str"+ nextUrl+ "String_Node_Str");
break;
}
out.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str" + config.queryRouterSheet + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ nextUrl+ "String_Node_Str");
break;
case 2:
out.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str" + nextUrl + "String_Node_Str");
break;
case 3:
out.append("String_Node_Str" + "String_Node_Str" + prevUrl + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ nextUrl+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
break;
case 4:
out.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str" + prevUrl + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ nextUrl+ "String_Node_Str");
break;
case 5:
out.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str" + prevUrl + "String_Node_Str"+ "String_Node_Str");
}
out.append("String_Node_Str" + "String_Node_Str");
return out.toString();
}
return null;
}