Program: 178208
Project: 178208
Buggy source:
private String processOutput(String s,Boolean rational){
  String lines[]=s.split("String_Node_Str");
  String ts="String_Node_Str";
  Boolean start=false;
  int eq=0;
  String ret="String_Node_Str";
  for (int i=0; i < lines.length; i++) {
    if ((lines[i] != null) && (lines[i].length() >= 5) && (lines[i].substring(0,4).equals("String_Node_Str"))) {
      start=false;
    }
    if (start) {
      if ((lines[i] != null) && (lines[i].length() >= 1)) {
        eq++;
        LinkedList<String> lp1=new LinkedList<String>();
        LinkedList<String> lp2=new LinkedList<String>();
        while ((lines[i] != null) && (lines[i].length() >= 1)) {
          String d1[]=lines[i].split("String_Node_Str");
          if (d1[0].trim().equals("String_Node_Str")) {
            lp1.add(lines[i]);
          }
          if (d1[0].trim().equals("String_Node_Str")) {
            lp2.add(lines[i]);
          }
          i++;
        }
        if (lp1.size() > lp2.size()) {
          while (lp2.size() < lp1.size()) {
            if (lp2.size() > 0) {
              String d1=lp2.get(lp2.size() - 1);
              lp2.add(new String(d1));
            }
 else {
              lp2.add(new String("String_Node_Str"));
            }
          }
        }
        if (lp1.size() < lp2.size()) {
          while (lp1.size() < lp2.size()) {
            if (lp1.size() > 0) {
              String d1=lp1.get(lp1.size() - 1);
              lp1.add(new String(d1));
            }
 else {
              lp1.add(new String("String_Node_Str"));
            }
          }
        }
        for (int k1=0; k1 < lp1.size(); k1++) {
          String p2[]=lp1.get(k1).split("String_Node_Str");
          String p1[]=lp2.get(k1).split("String_Node_Str");
          ret+="String_Node_Str" + eq + "String_Node_Str"+ eq+ "String_Node_Str";
          for (int j=1; j < p2.length - 1; j++) {
            if (rational) {
              ret+=p2[j] + "String_Node_Str";
            }
 else {
              ts=Double.toString((Math.round(Rational.valueOf(p2[j]).doubleValue() * 100000.) / 100000.));
              if (ts.equals("String_Node_Str")) {
                ts="String_Node_Str";
              }
              ret+=ts + "String_Node_Str";
            }
          }
          if (rational) {
            ret+="String_Node_Str" + p1[p1.length - 1] + "String_Node_Str";
          }
 else {
            ts=Double.toString((Math.round(Rational.valueOf(p1[p1.length - 1]).doubleValue() * 100000.) / 100000.));
            if (ts.equals("String_Node_Str")) {
              ts="String_Node_Str";
            }
            ret+="String_Node_Str" + ts + "String_Node_Str";
          }
          ret+="String_Node_Str" + eq + "String_Node_Str";
          for (int j=1; j < p1.length - 1; j++) {
            if (rational) {
              ret+=p1[j] + "String_Node_Str";
            }
 else {
              ts=Double.toString((Math.round(Rational.valueOf(p1[j]).doubleValue() * 100000.) / 100000.));
              if (ts.equals("String_Node_Str")) {
                ts="String_Node_Str";
              }
              ret+=ts + "String_Node_Str";
            }
          }
          if (rational) {
            ret+="String_Node_Str" + p2[p2.length - 1] + System.getProperty("String_Node_Str");
          }
 else {
            ts=Double.toString((Math.round(Rational.valueOf(p2[p2.length - 1]).doubleValue() * 100000.) / 100000.));
            if (ts.equals("String_Node_Str")) {
              ts="String_Node_Str";
            }
            ret+="String_Node_Str" + ts + System.getProperty("String_Node_Str");
          }
          if (k1 > 0) {
            eq++;
          }
        }
      }
    }
    if ((lines[i] != null) && (lines[i].length() >= 5) && (lines[i].substring(0,4).equals("String_Node_Str"))) {
      start=true;
    }
  }
  return ret;
}

Fixed version (ground truth):
private String processOutput(String s,Boolean rational){
  String lines[]=s.split("String_Node_Str");
  String ts="String_Node_Str";
  Boolean start=false;
  int eq=0;
  String ret="String_Node_Str";
  for (int i=0; i < lines.length; i++) {
    if ((lines[i] != null) && (lines[i].length() >= 5) && (lines[i].substring(0,4).equals("String_Node_Str"))) {
      start=false;
    }
    if (start) {
      if ((lines[i] != null) && (lines[i].length() >= 1)) {
        eq++;
        LinkedList<String> lp1=new LinkedList<String>();
        LinkedList<String> lp2=new LinkedList<String>();
        while ((lines[i] != null) && (lines[i].length() >= 1)) {
          String d1[]=lines[i].split("String_Node_Str");
          if (d1[0].trim().equals("String_Node_Str")) {
            lp1.add(lines[i]);
          }
          if (d1[0].trim().equals("String_Node_Str")) {
            lp2.add(lines[i]);
          }
          i++;
        }
        if (lp1.size() > lp2.size()) {
          while (lp2.size() < lp1.size()) {
            if (lp2.size() > 0) {
              String d1=lp2.get(lp2.size() - 1);
              lp2.add(new String(d1));
            }
 else {
              lp2.add(new String("String_Node_Str"));
            }
          }
        }
        if (lp1.size() < lp2.size()) {
          while (lp1.size() < lp2.size()) {
            if (lp1.size() > 0) {
              String d1=lp1.get(lp1.size() - 1);
              lp1.add(new String(d1));
            }
 else {
              lp1.add(new String("String_Node_Str"));
            }
          }
        }
        for (int k1=0; k1 < lp1.size(); k1++) {
          String p2[]=lp1.get(k1).split("String_Node_Str");
          String p1[]=lp2.get(k1).split("String_Node_Str");
          if (k1 > 0) {
            eq++;
          }
          ret+="String_Node_Str" + eq + "String_Node_Str"+ eq+ "String_Node_Str";
          for (int j=1; j < p2.length - 1; j++) {
            if (rational) {
              ret+=p2[j] + "String_Node_Str";
            }
 else {
              ts=Double.toString((Math.round(Rational.valueOf(p2[j]).doubleValue() * 100000.) / 100000.));
              if (ts.equals("String_Node_Str")) {
                ts="String_Node_Str";
              }
              ret+=ts + "String_Node_Str";
            }
          }
          if (rational) {
            ret+="String_Node_Str" + p1[p1.length - 1] + "String_Node_Str";
          }
 else {
            ts=Double.toString((Math.round(Rational.valueOf(p1[p1.length - 1]).doubleValue() * 100000.) / 100000.));
            if (ts.equals("String_Node_Str")) {
              ts="String_Node_Str";
            }
            ret+="String_Node_Str" + ts + "String_Node_Str";
          }
          ret+="String_Node_Str" + eq + "String_Node_Str";
          for (int j=1; j < p1.length - 1; j++) {
            if (rational) {
              ret+=p1[j] + "String_Node_Str";
            }
 else {
              ts=Double.toString((Math.round(Rational.valueOf(p1[j]).doubleValue() * 100000.) / 100000.));
              if (ts.equals("String_Node_Str")) {
                ts="String_Node_Str";
              }
              ret+=ts + "String_Node_Str";
            }
          }
          if (rational) {
            ret+="String_Node_Str" + p2[p2.length - 1] + System.getProperty("String_Node_Str");
          }
 else {
            ts=Double.toString((Math.round(Rational.valueOf(p2[p2.length - 1]).doubleValue() * 100000.) / 100000.));
            if (ts.equals("String_Node_Str")) {
              ts="String_Node_Str";
            }
            ret+="String_Node_Str" + ts + System.getProperty("String_Node_Str");
          }
        }
      }
    }
    if ((lines[i] != null) && (lines[i].length() >= 5) && (lines[i].substring(0,4).equals("String_Node_Str"))) {
      start=true;
    }
  }
  return ret;
}