Program: 5263
Project: 5263
Buggy source:
/** 
 * Encode an object into JSON text and write it to out. <p> If this object is a Map or a List, and it's also a JSONStreamAware or a JSONAware, JSONStreamAware or JSONAware will be considered firstly. <p> DO NOT call this method from writeJSONString(Writer) of a class that implements both JSONStreamAware and (Map or List) with  "this" as the first parameter, use JSONObject.writeJSONString(Map, Writer) or JSONArray.writeJSONString(List, Writer) instead. 
 * @see org.json.simple.JSONObject#writeJSONString(Map,Writer)
 * @see org.json.simple.JSONArray#writeJSONString(List,Writer)
 * @param value
 * @param writer
 */
public static void writeJSONString(Object value,Writer out) throws IOException {
  if (value == null) {
    out.write("String_Node_Str");
    return;
  }
  JSONFormatter formatter=formatters.get(value.getClass());
  if (formatter != null) {
    out.write(formatter.toJSONString(value));
    return;
  }
  if (value instanceof String) {
    out.write('\"');
    out.write(escape((String)value));
    out.write('\"');
    return;
  }
  if (value instanceof Double) {
    if (((Double)value).isInfinite() || ((Double)value).isNaN())     out.write("String_Node_Str");
 else     out.write(value.toString());
    return;
  }
  if (value instanceof Float) {
    if (((Float)value).isInfinite() || ((Float)value).isNaN())     out.write("String_Node_Str");
 else     out.write(value.toString());
    return;
  }
  if (value instanceof Number) {
    out.write(value.toString());
    return;
  }
  if (value instanceof Boolean) {
    out.write(value.toString());
    return;
  }
  if ((value instanceof JSONStreamAware)) {
    ((JSONStreamAware)value).writeJSONString(out);
    return;
  }
  if ((value instanceof JSONAware)) {
    out.write(((JSONAware)value).toJSONString());
    return;
  }
  if (value instanceof Map) {
    JSONObject.writeJSONString((Map)value,out);
    return;
  }
  if (value instanceof List) {
    JSONArray.writeJSONString((List)value,out);
    return;
  }
  out.write(value.toString());
}

Fixed version (ground truth):
/** 
 * Encode an object into JSON text and write it to out. <p> If this object is a Map or a List, and it's also a JSONStreamAware or a JSONAware, JSONStreamAware or JSONAware will be considered firstly. <p> DO NOT call this method from writeJSONString(Writer) of a class that implements both JSONStreamAware and (Map or List) with  "this" as the first parameter, use JSONObject.writeJSONString(Map, Writer) or JSONArray.writeJSONString(List, Writer) instead. 
 * @see org.json.simple.JSONObject#writeJSONString(Map,Writer)
 * @see org.json.simple.JSONArray#writeJSONString(List,Writer)
 * @param value
 * @param writer
 */
public static void writeJSONString(Object value,Writer out) throws IOException {
  if (value == null) {
    out.write("String_Node_Str");
    return;
  }
  JSONFormatter formatter=formatters.get(value.getClass());
  if (formatter != null) {
    out.write(formatter.toJSONString(value));
    return;
  }
  if (value instanceof String) {
    out.write('\"');
    out.write(escape((String)value));
    out.write('\"');
    return;
  }
  if (value instanceof Double) {
    if (((Double)value).isInfinite() || ((Double)value).isNaN())     out.write("String_Node_Str");
 else     out.write(value.toString());
    return;
  }
  if (value instanceof Float) {
    if (((Float)value).isInfinite() || ((Float)value).isNaN())     out.write("String_Node_Str");
 else     out.write(value.toString());
    return;
  }
  if (value instanceof Number) {
    out.write(value.toString());
    return;
  }
  if (value instanceof Boolean) {
    out.write(value.toString());
    return;
  }
  if ((value instanceof JSONStreamAware)) {
    ((JSONStreamAware)value).writeJSONString(out);
    return;
  }
  if ((value instanceof JSONAware)) {
    out.write(((JSONAware)value).toJSONString());
    return;
  }
  if (value instanceof Map) {
    JSONObject.writeJSONString((Map)value,out);
    return;
  }
  if (value instanceof List) {
    JSONArray.writeJSONString((List)value,out);
    return;
  }
  writeJSONString(value.toString(),out);
}