You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Ryan Phillips (Commented) (JIRA)" <ji...@apache.org> on 2011/11/04 20:43:51 UTC

[jira] [Commented] (THRIFT-1238) Thrift JS client cannot read map of structures

    [ https://issues.apache.org/jira/browse/THRIFT-1238?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13144273#comment-13144273 ] 

Ryan Phillips commented on THRIFT-1238:
---------------------------------------

Hi!

I'm testing thrift 0.8.0 with our code base and came across an issue using javascript and node-thrift.

Our generated thrift code runs with this error: Uncaught TypeError: Cannot read property 'length' of undefined.

The generated code includes:
  if (input.rstack.length > input.rpos[input.rpos.length -1] + 1) {
    input.rstack.pop();
  }

It appears this patch breaks binary protocol compatibility, but I want to run the issue by everyone, since I'm new with thrift.

Thanks,
Ryan
                
> Thrift JS client cannot read map of structures
> ----------------------------------------------
>
>                 Key: THRIFT-1238
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1238
>             Project: Thrift
>          Issue Type: Bug
>          Components: JavaScript - Compiler, JavaScript - Library
>    Affects Versions: 0.6.1
>            Reporter: Henrique Mendonca
>              Labels: javascript
>             Fix For: 0.8
>
>         Attachments: THRIFT-1238-fix-maps+qunit.patch, THRIFT-1238-qunit-insanity.patch
>
>
> Apparently we have a problem reading map of structures, only one item is been read and the other come as undefined in the result map on the client side.
> I was having this with some complex maps and notice that the test case 'testInsanity' was quite similar to my case but was actually been tested at all. Then checking its result I could see that's it actually a general problem.
> The server sends 2 elements:
> {code}
> {
>     "1":{
>         "3":{
>             "userMap":{
>                 "8":8,
>                 "5":5
>             },
>             "xtructs":[{
>                     "string_thing":"Goodbye4",
>                     "byte_thing":4,
>                     "i32_thing":4,
>                     "i64_thing":4
>                 },
>                 {
>                     "string_thing":"Hello2",
>                     "byte_thing":2,
>                     "i32_thing":2,
>                     "i64_thing":2
>                 }
>             ]
>         },
>         "2":{
>             "userMap":{
>                 "8":8,
>                 "5":5
>             },
>             "xtructs":[{
>                     "string_thing":"Goodbye4",
>                     "byte_thing":4,
>                     "i32_thing":4,
>                     "i64_thing":4
>                 },
>                 {
>                     "string_thing":"Hello2",
>                     "byte_thing":2,
>                     "i32_thing":2,
>                     "i64_thing":2
>                 }
>             ]
>         }
>     },
>     "2":{
>         "6":{
>             "userMap":null,
>             "xtructs":null
>         }
>     }
> }
> {code}
> but we can only read 1:
> {code}
> {
>     "1":{
>         "2":{
>             "userMap":{
>                 "8":8,
>                 "5":5
>             },
>             "xtructs":[{
>                     "string_thing":"Goodbye4",
>                     "byte_thing":4,
>                     "i32_thing":4,
>                     "i64_thing":4
>                 },
>                 {
>                     "string_thing":"Hello2",
>                     "byte_thing":2,
>                     "i32_thing":2,
>                     "i64_thing":2
>                 }
>             ]
>         },
>         "undefined":{
>             "userMap":null,
>             "xtructs":null
>         }
>     },
>     "2":{
>         "6":{
>             "userMap":null,
>             "xtructs":null
>         }
>     }
> }
> {code}
> on my code it also happens with 3 or more structures, only the first one is read, the second is "undefined" and the rest is gone!
> ps.: I'm submitting the patch for the unit test. I had a quick look on the code but could find anything yet and won't have time in the next weeks...

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira