Program: 59619
Project: 59619
Buggy source:
@Override public JsonEvent nextEvent(){
  if (fireEndPropertyEvent) {
    if (state.peek() != ReaderState.PROPERTY) {
      throw new IllegalStateException("String_Node_Str" + state.peek());
    }
    fireEndPropertyEvent=false;
    return createEndPropertyEvent(null);
  }
  if (hasNext()) {
    JsonToken token=tokenizer.nextToken();
switch (state.peek()) {
case NONE:
      if (token.type != JsonTokenType.LEFT_CURLY_BRACKET) {
        throw new JsonParseException("String_Node_Str");
      }
 else {
        return createStartObjectEvent();
      }
case OBJECT:
    if (expectCommaOrEnd) {
      if (token.type == JsonTokenType.COMMA) {
        if (!tokenizer.hasNext()) {
          throw new JsonParseException("String_Node_Str");
        }
        token=tokenizer.nextToken();
      }
 else       if (token.type != JsonTokenType.RIGHT_CURLY_BRACKET) {
        throw new JsonParseException("String_Node_Str" + token.type);
      }
      expectCommaOrEnd=false;
    }
switch (token.type) {
case STRING:
    if (!tokenizer.hasNext() || tokenizer.nextToken().type != JsonTokenType.COLON) {
      throw new JsonParseException("String_Node_Str" + token.value);
    }
  expectCommaOrEnd=true;
return createStartPropertyEvent(token.value);
case RIGHT_CURLY_BRACKET:
return createEndObjectEvent();
default :
throw new JsonParseException("String_Node_Str");
}
case PROPERTY:
switch (token.type) {
case STRING:
case NUMBER:
case TRUE:
case FALSE:
return createEndPropertyEvent(token.value);
case NULL:
return createEndPropertyEvent(null);
case LEFT_CURLY_BRACKET:
return createStartObjectEvent();
case LEFT_BRACKET:
return createStartArrayEvent();
default :
throw new JsonParseException("String_Node_Str");
}
case ARRAY:
if (expectCommaOrEnd) {
if (token.type == JsonTokenType.COMMA) {
if (!tokenizer.hasNext()) {
throw new JsonParseException("String_Node_Str");
}
token=tokenizer.nextToken();
}
 else if (token.type != JsonTokenType.RIGHT_BRACKET) {
throw new JsonParseException("String_Node_Str");
}
expectCommaOrEnd=false;
}
switch (token.type) {
case STRING:
expectCommaOrEnd=true;
case NUMBER:
expectCommaOrEnd=true;
case TRUE:
expectCommaOrEnd=true;
case FALSE:
expectCommaOrEnd=true;
return createValueEvent(token.value);
case NULL:
expectCommaOrEnd=true;
return createValueEvent(null);
case LEFT_CURLY_BRACKET:
expectCommaOrEnd=true;
return createStartObjectEvent();
case LEFT_BRACKET:
expectCommaOrEnd=true;
return createStartArrayEvent();
case RIGHT_BRACKET:
return createEndArrayEvent();
default :
break;
}
}
}
this.previousEvent=null;
throw new RuntimeException("String_Node_Str");
}

Fixed version (ground truth):
@Override public JsonEvent nextEvent(){
  if (fireEndPropertyEvent) {
    if (state.peek() != ReaderState.PROPERTY) {
      throw new IllegalStateException("String_Node_Str" + state.peek());
    }
    fireEndPropertyEvent=false;
    return createEndPropertyEvent(null);
  }
  if (hasNext()) {
    JsonToken token=tokenizer.nextToken();
switch (state.peek()) {
case NONE:
      if (token.type != JsonTokenType.LEFT_CURLY_BRACKET) {
        throw new JsonParseException("String_Node_Str");
      }
 else {
        return createStartObjectEvent();
      }
case OBJECT:
    if (expectCommaOrEnd) {
      if (token.type == JsonTokenType.COMMA) {
        if (!tokenizer.hasNext()) {
          throw new JsonParseException("String_Node_Str");
        }
        token=tokenizer.nextToken();
      }
 else       if (token.type != JsonTokenType.RIGHT_CURLY_BRACKET) {
        throw new JsonParseException("String_Node_Str" + token.type);
      }
      expectCommaOrEnd=false;
    }
switch (token.type) {
case STRING:
    if (!tokenizer.hasNext() || tokenizer.nextToken().type != JsonTokenType.COLON) {
      throw new JsonParseException("String_Node_Str" + token.value);
    }
  expectCommaOrEnd=true;
return createStartPropertyEvent(token.value);
case RIGHT_CURLY_BRACKET:
return createEndObjectEvent();
default :
throw new JsonParseException("String_Node_Str");
}
case PROPERTY:
switch (token.type) {
case STRING:
case NUMBER:
case TRUE:
case FALSE:
return createEndPropertyEvent(token.value);
case NULL:
return createEndPropertyEvent(null);
case LEFT_CURLY_BRACKET:
return createStartObjectEvent();
case LEFT_BRACKET:
return createStartArrayEvent();
default :
throw new JsonParseException("String_Node_Str");
}
case ARRAY:
if (expectCommaOrEnd) {
if (token.type == JsonTokenType.COMMA) {
if (!tokenizer.hasNext()) {
throw new JsonParseException("String_Node_Str");
}
token=tokenizer.nextToken();
}
 else if (token.type != JsonTokenType.RIGHT_BRACKET) {
throw new JsonParseException("String_Node_Str");
}
expectCommaOrEnd=false;
}
switch (token.type) {
case STRING:
case NUMBER:
case TRUE:
case FALSE:
expectCommaOrEnd=true;
return createValueEvent(token.value);
case NULL:
expectCommaOrEnd=true;
return createValueEvent(null);
case LEFT_CURLY_BRACKET:
expectCommaOrEnd=true;
return createStartObjectEvent();
case LEFT_BRACKET:
expectCommaOrEnd=true;
return createStartArrayEvent();
case RIGHT_BRACKET:
return createEndArrayEvent();
default :
break;
}
}
}
this.previousEvent=null;
throw new RuntimeException("String_Node_Str");
}