Program: 135146
Project: 135146
Buggy source:
@Override public JsonToken nextToken() throws IOException, JsonParseException {
  JsonToken nextToken=null;
  if (!unpacker.hasNext()) {
    if (_parsingContext.inObject()) {
      nextToken=JsonToken.END_OBJECT;
    }
 else     if (_parsingContext.inArray()) {
      nextToken=JsonToken.END_ARRAY;
    }
 else {
      throw new IllegalStateException("String_Node_Str");
    }
    _currToken=nextToken;
    _parsingContext=_parsingContext.getParent();
    _handleEOF();
    unpacker.close();
    return nextToken;
  }
  if (_parsingContext.inObject() || _parsingContext.inArray()) {
    if (stack.getFirst().isEmpty()) {
      stack.pop();
      _parsingContext=_parsingContext.getParent();
      _currToken=_parsingContext.inObject() ? JsonToken.END_OBJECT : JsonToken.END_ARRAY;
      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();
currentString=str;
if (_parsingContext.inObject() && _currToken != JsonToken.FIELD_NAME) {
_parsingContext.setCurrentName(str);
nextToken=JsonToken.FIELD_NAME;
}
 else {
nextToken=JsonToken.VALUE_STRING;
}
break;
case BINARY:
nextToken=JsonToken.VALUE_STRING;
break;
case ARRAY:
nextToken=JsonToken.START_ARRAY;
stack.push(new StackItemForArray(unpacker.unpackMapHeader()));
_parsingContext=_parsingContext.createChildArrayContext(-1,-1);
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)) || (_parsingContext.inArray() && _currToken != JsonToken.START_ARRAY)) {
stack.getFirst().consume();
}
return nextToken;
}

Fixed version (ground truth):
@Override public JsonToken nextToken() throws IOException, JsonParseException {
  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();
      return _currToken;
    }
  }
  if (!unpacker.hasNext()) {
    if (!_parsingContext.inObject() && !_parsingContext.inArray()) {
      throw new IllegalStateException("String_Node_Str");
    }
    _currToken=_parsingContext.inObject() ? JsonToken.END_OBJECT : JsonToken.END_ARRAY;
    _parsingContext=_parsingContext.getParent();
    unpacker.close();
    _handleEOF();
    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();
currentString=str;
if (_parsingContext.inObject() && _currToken != JsonToken.FIELD_NAME) {
_parsingContext.setCurrentName(str);
nextToken=JsonToken.FIELD_NAME;
}
 else {
nextToken=JsonToken.VALUE_STRING;
}
break;
case BINARY:
nextToken=JsonToken.VALUE_STRING;
break;
case ARRAY:
nextToken=JsonToken.START_ARRAY;
stack.push(new StackItemForArray(unpacker.unpackMapHeader()));
_parsingContext=_parsingContext.createChildArrayContext(-1,-1);
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)) || (_parsingContext.inArray() && _currToken != JsonToken.START_ARRAY)) {
stack.getFirst().consume();
}
return nextToken;
}