Program: 19229
Project: 19229
Buggy source:
private String processDataBlock(String dataBlock){
  StringBuilder retval=new StringBuilder();
  String[] blockSplit=dataBlock.split(BLOCK_SEPERATOR);
  String lastTime=null;
  String latAxisName=this.handler.getLatAxisName();
  String lonAxisName=this.handler.getLonAxisName();
  String depthAxisName=this.handler.getDepthAxisName();
  boolean skipLatLonBlock;
  for (  String block : blockSplit) {
    String[] tokenSplit=block.split(TOKEN_SEPERATOR);
    skipLatLonBlock=false;
    for (    String obsValue : tokenSplit) {
      String[] obs=obsValue.split("String_Node_Str");
      if (obs.length > 1 && (obs[0].equals("String_Node_Str") || isInRequestObservedProperties(obs[0]))) {
        if (lastTime != null && obs[0].equals("String_Node_Str")) {
          if (!lastTime.equals(obs[1])) {
            if (retval.length() > 1)             retval.deleteCharAt(retval.length() - 1);
            retval.append(BLOCK_SEPERATOR);
          }
 else           skipLatLonBlock=true;
        }
        if (!((obs[0].equals(latAxisName) || obs[0].equals(lonAxisName) || obs[0].equals("String_Node_Str")|| (depthAxisName != null && obs[0].equals(depthAxisName))) && skipLatLonBlock)) {
          retval.append(obs[1]).append(TOKEN_SEPERATOR);
        }
        if (obs[0].equals("String_Node_Str"))         lastTime=obs[1];
      }
    }
  }
  if (retval.length() > 1)   retval.deleteCharAt(retval.length() - 1);
  return retval.toString();
}

Fixed version (ground truth):
private String processDataBlock(String dataBlock){
  StringBuilder retval=new StringBuilder();
  String[] blockSplit=dataBlock.split(BLOCK_SEPERATOR);
  String lastTime=null;
  String latAxisName=this.handler.getLatAxisName();
  String lonAxisName=this.handler.getLonAxisName();
  String depthAxisName=this.handler.getDepthAxisName();
  boolean skipLatLonBlock;
  String lastDepth=null;
  for (  String block : blockSplit) {
    String[] tokenSplit=block.split(TOKEN_SEPERATOR);
    skipLatLonBlock=false;
    String skippedStr="String_Node_Str";
    for (    String obsValue : tokenSplit) {
      String[] obs=obsValue.split("String_Node_Str");
      if (obs.length > 1 && (obs[0].equals("String_Node_Str") || isInRequestObservedProperties(obs[0]))) {
        if (lastTime != null && obs[0].equals("String_Node_Str")) {
          if (!lastTime.equals(obs[1])) {
            if (retval.length() > 1)             retval.deleteCharAt(retval.length() - 1);
            retval.append(BLOCK_SEPERATOR);
          }
 else           skipLatLonBlock=true;
        }
        if (depthAxisName != null && obs[0].equals(depthAxisName)) {
          if (skipLatLonBlock) {
            if (lastDepth != obs[1]) {
              skipLatLonBlock=false;
              if (retval.length() > 1)               retval.deleteCharAt(retval.length() - 1);
              retval.append(BLOCK_SEPERATOR);
              retval.append(skippedStr);
              skippedStr="String_Node_Str";
            }
          }
          lastDepth=obs[1];
        }
        if (!((obs[0].equals(latAxisName) || obs[0].equals(lonAxisName) || obs[0].equals("String_Node_Str")|| (depthAxisName != null && obs[0].equals(depthAxisName))) && skipLatLonBlock)) {
          retval.append(obs[1]).append(TOKEN_SEPERATOR);
        }
 else {
          skippedStr+=obs[1] + TOKEN_SEPERATOR;
        }
        if (obs[0].equals("String_Node_Str"))         lastTime=obs[1];
      }
    }
  }
  if (retval.length() > 1)   retval.deleteCharAt(retval.length() - 1);
  return retval.toString();
}