[
https://issues.apache.org/jira/browse/TINKERPOP-1738?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16364747#comment-16364747
]
Kevin Gallardo commented on TINKERPOP-1738:
-------------------------------------------
Hm well if I remember correctly the issue is that we were *not* getting the
error consistently previously.
I.e. if trying to deserialize a value out of bounds for a int32 you should get
an error. However with the GraphSON2+ deserialization mechanism sometimes
(depending on the order of the values) the deserialization would happen in a
_Jackson_ TokenBuffer internally and in this TokenBuffer class the out-of-bound
wasn't taken into account and deserialized wrong. With the fix in Jackson now
if calling TokenBuffer.getIntValue() and the content is out-of-bound of an int
you would get an exception too.
TL;DR:
{code:java}
'{"@value":{"step":[["addV","poc_int"],["property","bigint1value",{"@value":-4294967295,"@type":"g:Int32"}]]},"@type":"g:Bytecode"}'{code}
and
{code:java}
'{"@type":"g:Bytecode","@value":{"step":[["addV","poc_int"],["property","bigint1value",{"@type":"g:Int32","@value":-4294967295}]]}}'{code}
Should in theory both fail now because trying to deserialize an int that
doesn't fit into an int.
> Proper functioning of GraphSONReader depends on order of elements in String
> representation
> ------------------------------------------------------------------------------------------
>
> Key: TINKERPOP-1738
> URL: https://issues.apache.org/jira/browse/TINKERPOP-1738
> Project: TinkerPop
> Issue Type: Bug
> Components: io
> Affects Versions: 3.3.0
> Reporter: Daniel Kuppitz
> Assignee: stephen mallette
> Priority: Major
>
> The following two snippets are basically using the same stringified JSON
> object, it's just the order of elements that is different.
> {noformat}
> gremlin> GraphSONReader.build().create().readObject(new
> java.io.ByteArrayInputStream('{"@value":{"step":[["addV","poc_int"],["property","bigint1value",{"@value":-4294967295,"@type":"g:Int32"}]]},"@type":"g:Bytecode"}'.getBytes()),
> Bytecode.class)
> ==>[[], [addV(poc_int), property(bigint1value, 1)]]
> {noformat}
> {noformat}
> gremlin> GraphSONReader.build().create().readObject(new
> java.io.ByteArrayInputStream('{"@type":"g:Bytecode","@value":{"step":[["addV","poc_int"],["property","bigint1value",{"@type":"g:Int32","@value":-4294967295}]]}}'.getBytes()),
> Bytecode.class)
> Could not deserialize the JSON value as required. Nested exception:
> org.apache.tinkerpop.shaded.jackson.databind.JsonMappingException: Could not
> deserialize the JSON value as required. Nested exception:
> org.apache.tinkerpop.shaded.jackson.core.JsonParseException: Numeric value
> (-4294967295) out of range of int
> at [Source: java.io.ByteArrayInputStream@6d367020; line: 1, column: 126]
> at [Source: java.io.ByteArrayInputStream@6d367020; line: 1, column: 115]
> (through reference chain: java.util.ArrayList[1]->java.util.ArrayList[2])
> at [Source: java.io.ByteArrayInputStream@6d367020; line: 1, column: 115]
> Type ':help' or ':h' for help.
> Display stack trace? [yN]
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)