Program: 178235
Project: 178235
Buggy source:
/** 
 * Parse the string sent back from the RepRap machine.
 */
private long waitForResponse(){
  int i;
  String resp="String_Node_Str";
  long result=allSentOK;
  String lns;
  resetReceived();
  boolean goAgain;
  for (; ; ) {
    try {
      i=serialInStream.read();
    }
 catch (    Exception e) {
      i=-1;
    }
    if (i >= 0) {
      char c=(char)i;
      if (c == '\n' || c == '\r') {
        goAgain=false;
        if (resp.startsWith("String_Node_Str") || resp.contentEquals("String_Node_Str")) {
          resp="String_Node_Str";
          goAgain=true;
        }
 else         if (resp.startsWith("String_Node_Str")) {
          result=shutDown;
          Debug.e("String_Node_Str" + resp);
        }
 else         if (resp.startsWith("String_Node_Str")) {
          Debug.d("String_Node_Str" + resp);
          resp="String_Node_Str";
          goAgain=true;
        }
 else         if (resp.endsWith("String_Node_Str")) {
          goAgain=true;
        }
 else         if (resp.startsWith("String_Node_Str")) {
          lns=resp.substring(3);
          int sp=lns.indexOf("String_Node_Str");
          if (sp > 0)           lns=lns.substring(0,sp);
          result=Long.parseLong(lns);
          Debug.e("String_Node_Str" + result + "String_Node_Str"+ resp);
        }
 else         if (!resp.startsWith("String_Node_Str")) {
          Debug.e("String_Node_Str" + resp);
          result=lineNumber;
        }
        eTemp=parseReturnedValue(resp,"String_Node_Str");
        bTemp=parseReturnedValue(resp,"String_Node_Str");
        if (resp.indexOf("String_Node_Str") >= 0) {
          x=parseReturnedValue(resp,"String_Node_Str");
          y=parseReturnedValue(resp,"String_Node_Str");
          z=parseReturnedValue(resp,"String_Node_Str");
          e=parseReturnedValue(resp,"String_Node_Str");
        }
        if (!goAgain) {
          Debug.c("String_Node_Str" + resp);
          lastResp=resp.substring(2);
          return result;
        }
      }
 else       resp+=c;
    }
  }
}

Fixed version (ground truth):
/** 
 * Parse the string sent back from the RepRap machine.
 */
private long waitForResponse(){
  int i;
  String resp="String_Node_Str";
  long result=allSentOK;
  String lns;
  resetReceived();
  boolean goAgain;
  Date timer=new Date();
  long startWait=timer.getTime();
  long timeNow;
  long increment=2000;
  long longWait=10 * 60 * 1000;
  for (; ; ) {
    timeNow=timer.getTime() - startWait;
    if (timeNow > increment) {
      Debug.d("String_Node_Str" + timeNow / 1000 + "String_Node_Str");
      increment=2 * increment;
    }
    if (timeNow > longWait) {
      Debug.e("String_Node_Str" + timeNow / 1000 + "String_Node_Str");
      try {
        queue("String_Node_Str");
      }
 catch (      Exception e) {
        e.printStackTrace();
      }
    }
    try {
      i=serialInStream.read();
    }
 catch (    Exception e) {
      i=-1;
    }
    if (i >= 0) {
      char c=(char)i;
      if (c == '\n' || c == '\r') {
        goAgain=false;
        if (resp.startsWith("String_Node_Str") || resp.contentEquals("String_Node_Str")) {
          resp="String_Node_Str";
          goAgain=true;
        }
 else         if (resp.startsWith("String_Node_Str")) {
          result=shutDown;
          Debug.e("String_Node_Str" + resp);
        }
 else         if (resp.startsWith("String_Node_Str")) {
          Debug.d("String_Node_Str" + resp);
          resp="String_Node_Str";
          goAgain=true;
        }
 else         if (resp.endsWith("String_Node_Str")) {
          goAgain=true;
        }
 else         if (resp.startsWith("String_Node_Str")) {
          lns=resp.substring(3);
          int sp=lns.indexOf("String_Node_Str");
          if (sp > 0)           lns=lns.substring(0,sp);
          result=Long.parseLong(lns);
          Debug.e("String_Node_Str" + result + "String_Node_Str"+ resp);
        }
 else         if (!resp.startsWith("String_Node_Str")) {
          Debug.e("String_Node_Str" + resp);
          result=lineNumber;
        }
        eTemp=parseReturnedValue(resp,"String_Node_Str");
        bTemp=parseReturnedValue(resp,"String_Node_Str");
        if (resp.indexOf("String_Node_Str") >= 0) {
          x=parseReturnedValue(resp,"String_Node_Str");
          y=parseReturnedValue(resp,"String_Node_Str");
          z=parseReturnedValue(resp,"String_Node_Str");
          e=parseReturnedValue(resp,"String_Node_Str");
        }
        if (!goAgain) {
          Debug.c("String_Node_Str" + resp);
          lastResp=resp.substring(2);
          return result;
        }
      }
 else       resp+=c;
    }
  }
}