[ 
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)

Reply via email to