Program: 117712
Project: 117712
Buggy source:
private Topic parseComment(JSONObject c,HashMap<String,Topic> thingTypes,TopicMap tm) throws JSONException, TopicMapException {
  if (forceStop()) {
    return null;
  }
  final JSONObject comment=c;
  JSONObject commentData=comment.getJSONObject("String_Node_Str");
  String kind=comment.getString("String_Node_Str");
  String id=commentData.getString("String_Node_Str");
  log("String_Node_Str" + id);
  Topic commentTopic=getOrCreateTopic(tm,SI_ROOT + id);
  commentTopic.setBaseName("String_Node_Str" + "String_Node_Str" + id + "String_Node_Str");
  try {
    commentTopic.addType(thingTypes.get(kind));
  }
 catch (  Exception e) {
    log("String_Node_Str" + kind);
  }
  addCommentOccurenceData(tm,commentData,commentTopic);
  if (commentData.has("String_Node_Str")) {
    String author=commentData.getString("String_Node_Str");
    Topic account=tm.getTopic(SI_ROOT + author);
    if (account != null) {
      associateAccount(tm,comment,account,thingTypes);
    }
 else     if (!author.equals("String_Node_Str") && CRAWL_SETTINGS.get("String_Node_Str")) {
      log("String_Node_Str" + author);
      String authorUrl=apiRoot + "String_Node_Str" + author+ "String_Node_Str";
      ParseCallback<JsonNode> callback=new ParseCallback<JsonNode>(tm,thingTypes){
        @Override public void run(        HttpResponse<JsonNode> response){
          try {
            JSONObject respObject=response.getBody().getObject();
            if (respObject.has("String_Node_Str") && respObject.getString("String_Node_Str").equals("String_Node_Str")) {
              Topic account=parseAccount(respObject,thingTypes,tm);
              associateAccount(tm,comment,account,thingTypes);
            }
          }
 catch (          JSONException|TopicMapException e) {
            log(e.getMessage());
          }
        }
      }
;
      requester.doRequest(Unirest.get(authorUrl),callback);
    }
  }
  if (commentData.has("String_Node_Str")) {
    String parentId=commentData.getString("String_Node_Str");
    Topic parentTopic=getOrCreateTopic(tm,SI_ROOT + parentId);
    associateParent(tm,commentTopic,parentTopic);
  }
  if (commentData.has("String_Node_Str")) {
    JSONArray children;
    try {
      children=commentData.getJSONObject("String_Node_Str").getJSONObject("String_Node_Str").getJSONArray("String_Node_Str");
    }
 catch (    JSONException jse) {
      children=new JSONArray();
    }
    for (int i=0; i < children.length(); i++) {
      JSONObject childData=children.getJSONObject(i);
      String childKind=childData.getString("String_Node_Str");
      if (childKind.equals(THING_TYPE_MORE) && CRAWL_SETTINGS.get("String_Node_Str")) {
        parseMore(commentData,childData,tm,thingTypes);
      }
 else {
        parseThing(childData,tm,thingTypes);
      }
    }
  }
  if (commentData.has("String_Node_Str")) {
    String link_id=commentData.getString("String_Node_Str");
    Topic linkTopic=tm.getTopic(SI_ROOT + link_id);
    if (linkTopic == null && CRAWL_SETTINGS.get("String_Node_Str")) {
      ParseCallback<JsonNode> callback=new ParseCallback<JsonNode>(tm,thingTypes){
        @Override public void run(        HttpResponse<JsonNode> response){
          try {
            JSONObject respObj=response.getBody().getObject();
            parseThing(respObj,tm,thingTypes);
          }
 catch (          Exception e) {
          }
        }
      }
;
      requester.doRequest(Unirest.get(apiRoot + "String_Node_Str" + link_id),callback);
    }
  }
  return commentTopic;
}

Fixed version (ground truth):
private Topic parseComment(JSONObject c,HashMap<String,Topic> thingTypes,TopicMap tm) throws JSONException, TopicMapException {
  if (forceStop()) {
    return null;
  }
  final JSONObject comment=c;
  JSONObject commentData=comment.getJSONObject("String_Node_Str");
  String kind=comment.getString("String_Node_Str");
  String id=commentData.getString("String_Node_Str");
  log("String_Node_Str" + id);
  Topic commentTopic=getOrCreateTopic(tm,SI_ROOT + id);
  commentTopic.setBaseName("String_Node_Str" + "String_Node_Str" + id + "String_Node_Str");
  try {
    commentTopic.addType(thingTypes.get(kind));
  }
 catch (  Exception e) {
    log("String_Node_Str" + kind);
  }
  addCommentOccurenceData(tm,commentData,commentTopic);
  if (commentData.has("String_Node_Str")) {
    String author=commentData.getString("String_Node_Str");
    Topic account=tm.getTopic(SI_ROOT + author);
    if (account != null) {
      associateAccount(tm,comment,account,thingTypes);
    }
 else     if (!author.equals("String_Node_Str") && CRAWL_SETTINGS.get("String_Node_Str")) {
      log("String_Node_Str" + author);
      String authorUrl=apiRoot + "String_Node_Str" + author+ "String_Node_Str";
      ParseCallback<JsonNode> callback=new ParseCallback<JsonNode>(tm,thingTypes){
        @Override public void run(        HttpResponse<JsonNode> response){
          try {
            JSONObject respObject=response.getBody().getObject();
            if (respObject.has("String_Node_Str") && respObject.getString("String_Node_Str").equals(THING_TYPE_ACCOUNT)) {
              Topic account=parseAccount(respObject,thingTypes,tm);
              associateAccount(tm,comment,account,thingTypes);
            }
          }
 catch (          JSONException|TopicMapException e) {
            log(e.getMessage());
          }
        }
        @Override protected void error(        Exception e,        String body){
          log(e.getMessage());
          if (body != null) {
            log("String_Node_Str");
            log(body);
          }
        }
      }
;
      requester.doRequest(Unirest.get(authorUrl),callback);
    }
  }
  if (commentData.has("String_Node_Str")) {
    String parentId=commentData.getString("String_Node_Str");
    Topic parentTopic=getOrCreateTopic(tm,SI_ROOT + parentId);
    associateParent(tm,commentTopic,parentTopic);
  }
  if (commentData.has("String_Node_Str")) {
    JSONArray children;
    try {
      children=commentData.getJSONObject("String_Node_Str").getJSONObject("String_Node_Str").getJSONArray("String_Node_Str");
    }
 catch (    JSONException jse) {
      children=new JSONArray();
    }
    for (int i=0; i < children.length(); i++) {
      JSONObject childData=children.getJSONObject(i);
      String childKind=childData.getString("String_Node_Str");
      if (childKind.equals(THING_TYPE_MORE) && CRAWL_SETTINGS.get("String_Node_Str")) {
        parseMore(commentData,childData,tm,thingTypes);
      }
 else {
        parseThing(childData,tm,thingTypes);
      }
    }
  }
  if (commentData.has("String_Node_Str")) {
    String link_id=commentData.getString("String_Node_Str");
    Topic linkTopic=tm.getTopic(SI_ROOT + link_id);
    if (linkTopic == null && CRAWL_SETTINGS.get("String_Node_Str")) {
      ParseCallback<JsonNode> callback=new ParseCallback<JsonNode>(tm,thingTypes){
        @Override public void run(        HttpResponse<JsonNode> response){
          try {
            JSONObject respObj=response.getBody().getObject();
            parseThing(respObj,tm,thingTypes);
          }
 catch (          Exception e) {
          }
        }
        @Override protected void error(        Exception e,        String body){
          log(e.getMessage());
          if (body != null) {
            log("String_Node_Str");
            log(body);
          }
        }
      }
;
      requester.doRequest(Unirest.get(apiRoot + "String_Node_Str" + link_id),callback);
    }
  }
  return commentTopic;
}