Program: 135151
Project: 135151
Buggy source:
@Override public JsonToken nextToken() throws IOException, JsonParseException {
  JsonToken nextToken=null;
  if (!unpacker.hasNext()) {
    _currToken=null;
    _parsingContext=_parsingContext.getParent();
    _handleEOF();
    unpacker.close();
    return null;
  }
  if (_parsingContext.inObject()) {
    if (stack.getFirst().isEmpty()) {
      stack.pop();
      _parsingContext=_parsingContext.getParent();
      _currToken=JsonToken.END_OBJECT;
      return _currToken;
    }
  }
  MessageFormat nextFormat=unpacker.getNextFormat();
  ValueType valueType=nextFormat.getValueType();
switch (valueType) {
case NIL:
    unpacker.unpackNil();
  nextToken=JsonToken.VALUE_NULL;
break;
case BOOLEAN:
boolean b=unpacker.unpackBoolean();
nextToken=b ? JsonToken.VALUE_TRUE : JsonToken.VALUE_FALSE;
break;
case INTEGER:
unpacker.unpackInteger(integerHolder);
currentNumber=integerHolder.isBigInteger() ? integerHolder.toBigInteger() : integerHolder.toLong();
nextToken=JsonToken.VALUE_NUMBER_INT;
break;
case FLOAT:
currentDouble=unpacker.unpackDouble();
nextToken=JsonToken.VALUE_NUMBER_FLOAT;
break;
case STRING:
String str=unpacker.unpackString();
if (_parsingContext.inObject() && _currToken != JsonToken.FIELD_NAME) {
_parsingContext.setCurrentName(str);
nextToken=JsonToken.FIELD_NAME;
}
 else {
currentString=str;
nextToken=JsonToken.VALUE_STRING;
}
break;
case BINARY:
nextToken=JsonToken.VALUE_STRING;
break;
case ARRAY:
nextToken=JsonToken.START_ARRAY;
break;
case MAP:
nextToken=JsonToken.START_OBJECT;
stack.push(new StackItemForObject(unpacker.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)) {
stack.getFirst().consume();
}
return nextToken;
}

Fixed version (ground truth):
@Override public JsonToken nextToken() throws IOException, JsonParseException {
  JsonToken nextToken=null;
  if (!unpacker.hasNext()) {
    _currToken=null;
    _parsingContext=_parsingContext.getParent();
    _handleEOF();
    unpacker.close();
    return null;
  }
  if (_parsingContext.inObject()) {
    if (stack.getFirst().isEmpty()) {
      stack.pop();
      _parsingContext=_parsingContext.getParent();
      _currToken=JsonToken.END_OBJECT;
      return _currToken;
    }
  }
  MessageFormat nextFormat=unpacker.getNextFormat();
  ValueType valueType=nextFormat.getValueType();
switch (valueType) {
case NIL:
    unpacker.unpackNil();
  nextToken=JsonToken.VALUE_NULL;
break;
case BOOLEAN:
boolean b=unpacker.unpackBoolean();
nextToken=b ? JsonToken.VALUE_TRUE : JsonToken.VALUE_FALSE;
break;
case INTEGER:
unpacker.unpackInteger(integerHolder);
currentNumber=integerHolder.isBigInteger() ? integerHolder.toBigInteger() : integerHolder.toLong();
nextToken=JsonToken.VALUE_NUMBER_INT;
break;
case FLOAT:
currentDouble=unpacker.unpackDouble();
nextToken=JsonToken.VALUE_NUMBER_FLOAT;
break;
case STRING:
String str=unpacker.unpackString();
if (_parsingContext.inObject() && _currToken != JsonToken.FIELD_NAME) {
currentString=str;
_parsingContext.setCurrentName(str);
nextToken=JsonToken.FIELD_NAME;
}
 else {
currentString=str;
nextToken=JsonToken.VALUE_STRING;
}
break;
case BINARY:
nextToken=JsonToken.VALUE_STRING;
break;
case ARRAY:
nextToken=JsonToken.START_ARRAY;
break;
case MAP:
nextToken=JsonToken.START_OBJECT;
stack.push(new StackItemForObject(unpacker.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)) {
stack.getFirst().consume();
}
return nextToken;
}