Pure-ruby CompactProtocol raises ArgumentError when deserializing under Ruby 1.9 --------------------------------------------------------------------------------
Key: THRIFT-1183 URL: https://issues.apache.org/jira/browse/THRIFT-1183 Project: Thrift Issue Type: Bug Components: Ruby - Library Affects Versions: 0.6.1 Environment: OS X 10.6 i686 / Ruby 1.9.2 Reporter: Ilya Maykov While testing my fix for THRIFT-1182 with various combinations of native/non-native ruby and binary/compact protocols, I stumbled upon a bug in the pure-ruby implementation of CompactProtocol. In lib/thrift/protocol/compact_protocol.rb line 306: ... val = dat[0] if (val > 0x7f) ... Here, dat is a string, so dat[0] returns a Fixnum in Ruby 1.8.7 but a string of size 1 in Ruby 1.9.2. The conditional compares dat[0] with 0x7f, which raises the following error in 1.9.2: /Users/ilyam/.rvm/gems/ruby-1.9.2-p180/gems/thrift-0.6.0/lib/thrift/protocol/compact_protocol.rb:307:in `>': comparison of String with 127 failed (ArgumentError) from /Users/ilyam/.rvm/gems/ruby-1.9.2-p180/gems/thrift-0.6.0/lib/thrift/protocol/compact_protocol.rb:307:in `read_byte' from /Users/ilyam/.rvm/gems/ruby-1.9.2-p180/gems/thrift-0.6.0/lib/thrift/protocol/compact_protocol.rb:243:in `read_field_begin' from /Users/ilyam/.rvm/gems/ruby-1.9.2-p180/gems/thrift-0.6.0/lib/thrift/struct.rb:86:in `block in read' from /Users/ilyam/.rvm/gems/ruby-1.9.2-p180/gems/thrift-0.6.0/lib/thrift/struct.rb:85:in `loop' from /Users/ilyam/.rvm/gems/ruby-1.9.2-p180/gems/thrift-0.6.0/lib/thrift/struct.rb:85:in `read' from /Users/ilyam/.rvm/gems/ruby-1.9.2-p180/gems/thrift-0.6.0/lib/thrift/serializer/deserializer.rb:29:in `deserialize' The solution is a one-line fix, patch will be attached shortly. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira