Program: 151799
Project: 151799
Buggy source:
private String evaluatePostfixExp(ArrayList<String> tokens){
  ArrayList<String> expstack=new ArrayList<String>();
  try {
    while (tokens.size() > 0) {
      String elem=tokens.remove(0);
      if (elem.equals("String_Node_Str")) {
        boolean b=toBool(expstack.remove(0));
        expstack.add(0,String.valueOf(!b));
      }
 else       if (elem.equals("String_Node_Str")) {
        boolean b2=toBool(expstack.remove(0));
        boolean b1=toBool(expstack.remove(0));
        expstack.add(0,String.valueOf(b1 && b2));
      }
 else       if (elem.equals("String_Node_Str")) {
        boolean b2=toBool(expstack.remove(0));
        boolean b1=toBool(expstack.remove(0));
        expstack.add(0,String.valueOf(b1 || b2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 + d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 - d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 * d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 / d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 % d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d=toNum(expstack.remove(0));
        expstack.add(String.valueOf(rng.nextInt((int)d)));
      }
 else       if (elem.equals("String_Node_Str")) {
        String v2=expstack.remove(0);
        String v1=expstack.remove(0);
        expstack.add(0,String.valueOf(v1.equals(v2)));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 > d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 < d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        String s2=expstack.remove(0);
        String s1=expstack.remove(0);
        expstack.add(0,s1 + s2);
      }
 else       if (elem.equals("String_Node_Str")) {
        String s2=expstack.remove(0);
        String s1=expstack.remove(0);
        expstack.add(0,s1 + "String_Node_Str" + s2);
      }
 else       if (elem.equals("String_Node_Str")) {
        String s=expstack.remove(0);
        String v=evaluateVar(s);
        if (v != null)         expstack.add(0,v);
 else {
          notifyError("String_Node_Str" + s + "String_Node_Str");
          expstack.add(0,"String_Node_Str");
        }
      }
 else       if (elem.equals("String_Node_Str")) {
        String s=expstack.remove(0);
        expstack.add(0,String.valueOf(toNum(s)));
      }
 else       if (elem.equals("String_Node_Str")) {
        String s=expstack.remove(0);
        expstack.add(0,String.valueOf(toBool(s)));
      }
 else       expstack.add(0,elem);
    }
  }
 catch (  Exception e) {
    notifyError("String_Node_Str");
    return null;
  }
  if (expstack.size() != 1) {
    notifyError("String_Node_Str");
    return null;
  }
  return expstack.get(0);
}

Fixed version (ground truth):
private String evaluatePostfixExp(ArrayList<String> tokens){
  ArrayList<String> expstack=new ArrayList<String>();
  try {
    while (tokens.size() > 0) {
      String elem=tokens.remove(0);
      if (elem.equals("String_Node_Str")) {
        boolean b=toBool(expstack.remove(0));
        expstack.add(0,String.valueOf(!b));
      }
 else       if (elem.equals("String_Node_Str")) {
        boolean b2=toBool(expstack.remove(0));
        boolean b1=toBool(expstack.remove(0));
        expstack.add(0,String.valueOf(b1 && b2));
      }
 else       if (elem.equals("String_Node_Str")) {
        boolean b2=toBool(expstack.remove(0));
        boolean b1=toBool(expstack.remove(0));
        expstack.add(0,String.valueOf(b1 || b2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 + d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 - d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 * d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 / d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 % d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d=toNum(expstack.remove(0));
        expstack.add(String.valueOf(rng.nextInt((int)d)));
      }
 else       if (elem.equals("String_Node_Str")) {
        String v2=expstack.remove(0);
        String v1=expstack.remove(0);
        expstack.add(0,String.valueOf(v1.equals(v2)));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 > d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        long d2=toNum(expstack.remove(0));
        long d1=toNum(expstack.remove(0));
        expstack.add(0,String.valueOf(d1 < d2));
      }
 else       if (elem.equals("String_Node_Str")) {
        String s2=expstack.remove(0);
        String s1=expstack.remove(0);
        expstack.add(0,s1 + s2);
      }
 else       if (elem.equals("String_Node_Str")) {
        String s2=expstack.remove(0);
        String s1=expstack.remove(0);
        expstack.add(0,s1 + "String_Node_Str" + s2);
      }
 else       if (elem.equals("String_Node_Str")) {
        String s=expstack.remove(0);
        String v=evaluateVar(s);
        if (v != null)         expstack.add(0,v);
 else {
          notifyError("String_Node_Str" + s + "String_Node_Str");
          expstack.add(0,"String_Node_Str");
        }
      }
 else       if (elem.equals("String_Node_Str")) {
        String s=expstack.remove(0);
        expstack.add(0,String.valueOf(toNum(s)));
      }
 else       if (elem.equals("String_Node_Str")) {
        String s=expstack.remove(0);
        expstack.add(0,String.valueOf(toBool(s)));
      }
 else       if (elem.equals("String_Node_Str")) {
        String s=expstack.remove(0);
        expstack.add(0,String.valueOf(s.equals("String_Node_Str")));
      }
 else       if (elem.equals("String_Node_Str")) {
        String s=expstack.remove(0);
        expstack.add(0,String.valueOf(s.length()));
      }
 else       expstack.add(0,elem);
    }
  }
 catch (  Exception e) {
    notifyError("String_Node_Str");
    return null;
  }
  if (expstack.size() != 1) {
    notifyError("String_Node_Str");
    return null;
  }
  return expstack.get(0);
}