Program: 109255
Project: 109255
Buggy source:
protected void parseMTL(BufferedReader reader,ArrayList<OBJMaterial> materials,Hashtable<String,Integer> materialsHash){
  try {
    String line;
    OBJMaterial currentMtl=null;
    while ((line=reader.readLine()) != null) {
      line=line.trim();
      String elements[]=line.split("String_Node_Str");
      if (elements.length > 0) {
        if (elements[0].equals("String_Node_Str")) {
          String mtlname=elements[1];
          currentMtl=new OBJMaterial(mtlname);
          materialsHash.put(mtlname,new Integer(materials.size()));
          materials.add(currentMtl);
        }
 else         if (elements[0].equals("String_Node_Str") && elements.length > 1) {
          String texname=elements[1];
          currentMtl.kdMap=parent.loadImage(texname);
        }
 else         if (elements[0].equals("String_Node_Str") && elements.length > 3) {
          currentMtl.ka.x=Float.valueOf(elements[1]).floatValue();
          currentMtl.ka.y=Float.valueOf(elements[2]).floatValue();
          currentMtl.ka.z=Float.valueOf(elements[3]).floatValue();
        }
 else         if (elements[0].equals("String_Node_Str") && elements.length > 3) {
          currentMtl.kd.x=Float.valueOf(elements[1]).floatValue();
          currentMtl.kd.y=Float.valueOf(elements[2]).floatValue();
          currentMtl.kd.z=Float.valueOf(elements[3]).floatValue();
        }
 else         if (elements[0].equals("String_Node_Str") && elements.length > 3) {
          currentMtl.ks.x=Float.valueOf(elements[1]).floatValue();
          currentMtl.ks.y=Float.valueOf(elements[2]).floatValue();
          currentMtl.ks.z=Float.valueOf(elements[3]).floatValue();
        }
 else         if ((elements[0].equals("String_Node_Str") || elements[0].equals("String_Node_Str")) && elements.length > 1) {
          currentMtl.d=Float.valueOf(elements[1]).floatValue();
        }
 else         if (elements[0].equals("String_Node_Str") && elements.length > 1) {
          currentMtl.ns=Float.valueOf(elements[1]).floatValue();
        }
      }
    }
  }
 catch (  Exception e) {
    e.printStackTrace();
  }
}

Fixed version (ground truth):
protected void parseMTL(BufferedReader reader,ArrayList<OBJMaterial> materials,Hashtable<String,Integer> materialsHash){
  try {
    String line;
    OBJMaterial currentMtl=null;
    while ((line=reader.readLine()) != null) {
      line=line.trim();
      String elements[]=line.split("String_Node_Str");
      if (elements.length > 0) {
        if (elements[0].equals("String_Node_Str")) {
          String mtlname=elements[1];
          currentMtl=new OBJMaterial(mtlname);
          materialsHash.put(mtlname,new Integer(materials.size()));
          materials.add(currentMtl);
        }
 else         if (elements[0].equals("String_Node_Str") && elements.length > 1) {
          String texname=elements[1];
          currentMtl.kdMap=parent.loadImage(texname);
          currentMtl.kdMap.getTexture().setFlippedY(true);
        }
 else         if (elements[0].equals("String_Node_Str") && elements.length > 3) {
          currentMtl.ka.x=Float.valueOf(elements[1]).floatValue();
          currentMtl.ka.y=Float.valueOf(elements[2]).floatValue();
          currentMtl.ka.z=Float.valueOf(elements[3]).floatValue();
        }
 else         if (elements[0].equals("String_Node_Str") && elements.length > 3) {
          currentMtl.kd.x=Float.valueOf(elements[1]).floatValue();
          currentMtl.kd.y=Float.valueOf(elements[2]).floatValue();
          currentMtl.kd.z=Float.valueOf(elements[3]).floatValue();
        }
 else         if (elements[0].equals("String_Node_Str") && elements.length > 3) {
          currentMtl.ks.x=Float.valueOf(elements[1]).floatValue();
          currentMtl.ks.y=Float.valueOf(elements[2]).floatValue();
          currentMtl.ks.z=Float.valueOf(elements[3]).floatValue();
        }
 else         if ((elements[0].equals("String_Node_Str") || elements[0].equals("String_Node_Str")) && elements.length > 1) {
          currentMtl.d=Float.valueOf(elements[1]).floatValue();
        }
 else         if (elements[0].equals("String_Node_Str") && elements.length > 1) {
          currentMtl.ns=Float.valueOf(elements[1]).floatValue();
        }
      }
    }
  }
 catch (  Exception e) {
    e.printStackTrace();
  }
}