Program: 135136
Project: 135136
Buggy source:
@Override public JsonToken nextToken() throws IOException, JsonParseException {
  MessageUnpacker messageUnpacker=messageUnpackerHolder.get();
  JsonToken nextToken=null;
  if (_parsingContext.inObject() || _parsingContext.inArray()) {
    if (stack.getFirst().isEmpty()) {
      stack.pop();
      _currToken=_parsingContext.inObject() ? JsonToken.END_OBJECT : JsonToken.END_ARRAY;
      _parsingContext=_parsingContext.getParent();
      if (!messageUnpacker.hasNext()) {
        if (!stack.isEmpty() && !stack.getFirst().isEmpty()) {
          stack.getFirst().consume();
        }
      }
      return _currToken;
    }
  }
  if (!messageUnpacker.hasNext()) {
    if (!_parsingContext.inObject() && !_parsingContext.inArray()) {
      throw new IllegalStateException("String_Node_Str");
    }
    _currToken=_parsingContext.inObject() ? JsonToken.END_OBJECT : JsonToken.END_ARRAY;
    _parsingContext=_parsingContext.getParent();
    messageUnpacker.close();
    _handleEOF();
    return _currToken;
  }
  MessageFormat nextFormat=messageUnpacker.getNextFormat();
  ValueType valueType=nextFormat.getValueType();
switch (valueType) {
case NIL:
    messageUnpacker.unpackNil();
  nextToken=JsonToken.VALUE_NULL;
break;
case BOOLEAN:
boolean b=messageUnpacker.unpackBoolean();
nextToken=b ? JsonToken.VALUE_TRUE : JsonToken.VALUE_FALSE;
break;
case INTEGER:
messageUnpacker.unpackValue(valueHolder);
nextToken=JsonToken.VALUE_NUMBER_INT;
break;
case FLOAT:
messageUnpacker.unpackValue(valueHolder);
nextToken=JsonToken.VALUE_NUMBER_FLOAT;
break;
case STRING:
messageUnpacker.unpackValue(valueHolder);
if (_parsingContext.inObject() && _currToken != JsonToken.FIELD_NAME) {
_parsingContext.setCurrentName(valueHolder.getRef().asRaw().toString());
nextToken=JsonToken.FIELD_NAME;
}
 else {
nextToken=JsonToken.VALUE_STRING;
}
break;
case BINARY:
messageUnpacker.unpackValue(valueHolder);
nextToken=JsonToken.VALUE_EMBEDDED_OBJECT;
break;
case ARRAY:
nextToken=JsonToken.START_ARRAY;
stack.push(new StackItemForArray(messageUnpacker.unpackArrayHeader()));
_parsingContext=_parsingContext.createChildArrayContext(-1,-1);
break;
case MAP:
nextToken=JsonToken.START_OBJECT;
stack.push(new StackItemForObject(messageUnpacker.unpackMapHeader()));
_parsingContext=_parsingContext.createChildObjectContext(-1,-1);
break;
case EXTENDED:
throw new NotImplementedException();
default :
throw new IllegalStateException("String_Node_Str");
}
_currToken=nextToken;
if ((_parsingContext.inObject() && (_currToken != JsonToken.START_OBJECT && _currToken != JsonToken.FIELD_NAME)) || (_parsingContext.inArray() && _currToken != JsonToken.START_ARRAY)) {
stack.getFirst().consume();
}
return nextToken;
}

Fixed version (ground truth):
@Override public JsonToken nextToken() throws IOException, JsonParseException {
  MessageUnpacker messageUnpacker=messageUnpackerHolder.get();
  JsonToken nextToken=null;
  if (_parsingContext.inObject() || _parsingContext.inArray()) {
    if (stack.getFirst().isEmpty()) {
      stack.pop();
      _currToken=_parsingContext.inObject() ? JsonToken.END_OBJECT : JsonToken.END_ARRAY;
      _parsingContext=_parsingContext.getParent();
      if (stack.isEmpty()) {
        _handleEOF();
        if (!messageUnpacker.hasNext()) {
          messageUnpacker.close();
        }
      }
      return _currToken;
    }
  }
  MessageFormat nextFormat=messageUnpacker.getNextFormat();
  ValueType valueType=nextFormat.getValueType();
  StackItem newStack=null;
switch (valueType) {
case NIL:
    messageUnpacker.unpackNil();
  nextToken=JsonToken.VALUE_NULL;
break;
case BOOLEAN:
boolean b=messageUnpacker.unpackBoolean();
nextToken=b ? JsonToken.VALUE_TRUE : JsonToken.VALUE_FALSE;
break;
case INTEGER:
messageUnpacker.unpackValue(valueHolder);
nextToken=JsonToken.VALUE_NUMBER_INT;
break;
case FLOAT:
messageUnpacker.unpackValue(valueHolder);
nextToken=JsonToken.VALUE_NUMBER_FLOAT;
break;
case STRING:
messageUnpacker.unpackValue(valueHolder);
if (_parsingContext.inObject() && _currToken != JsonToken.FIELD_NAME) {
_parsingContext.setCurrentName(valueHolder.getRef().asRaw().toString());
nextToken=JsonToken.FIELD_NAME;
}
 else {
nextToken=JsonToken.VALUE_STRING;
}
break;
case BINARY:
messageUnpacker.unpackValue(valueHolder);
nextToken=JsonToken.VALUE_EMBEDDED_OBJECT;
break;
case ARRAY:
newStack=new StackItemForArray(messageUnpacker.unpackArrayHeader());
break;
case MAP:
newStack=new StackItemForObject(messageUnpacker.unpackMapHeader());
break;
case EXTENDED:
throw new NotImplementedException();
default :
throw new IllegalStateException("String_Node_Str");
}
if (_parsingContext.inObject() && nextToken != JsonToken.FIELD_NAME || _parsingContext.inArray()) {
stack.getFirst().consume();
}
if (newStack != null) {
stack.push(newStack);
if (newStack instanceof StackItemForArray) {
nextToken=JsonToken.START_ARRAY;
_parsingContext=_parsingContext.createChildArrayContext(-1,-1);
}
 else if (newStack instanceof StackItemForObject) {
nextToken=JsonToken.START_OBJECT;
_parsingContext=_parsingContext.createChildObjectContext(-1,-1);
}
}
_currToken=nextToken;
return nextToken;
}