You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Adam Hawkins (JIRA)" <ji...@apache.org> on 2015/03/01 23:15:04 UTC

[jira] [Created] (THRIFT-3015) Ruby structs are not recursively validated

Adam Hawkins created THRIFT-3015:
------------------------------------

             Summary: Ruby structs are not recursively validated
                 Key: THRIFT-3015
                 URL: https://issues.apache.org/jira/browse/THRIFT-3015
             Project: Thrift
          Issue Type: Bug
          Components: Ruby - Compiler
    Affects Versions: 0.9.2
         Environment: Ruby client & Ruby Server
            Reporter: Adam Hawkins
            Priority: Minor


I've come across something that I had fixed in a third party library, but after working with generated & ruby thrift library code I decided to file an issue here. The root cause is that {{Thrift::Struct}} & {{Thrift::Struct_Union}} sub-classes do not call {{validate}} on struct members of the same type. This is problematic because the library does correctly call {{validate}} to prevent the server or client from sending mal-formated message. Unfortunately this only works for simple protocols that don't use structs. This creates a bad user experience. Take this example protocol.

{code}
struct EchoMessage {
  1: required string message
}

struct NestedEchoMessage {
  1: required EchoMessage echo
}

service EchoService {
  NestedEcho echo(1: string message)
}
{code}

And a simple & incorrect implementation in ruby:

{code}
class Handler
  def echo(message)
     # note the nested Echo struct is missing
     NestedEcho.new
  end
end
{code}

This code has a few problems, but the key issue is that thrift library will attempt to send this message over the write & the client incorrectly receive a {{Thrift::Transport}} exception when it should receive a {{Thrift::ProtocolException}}.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)