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)

Reply via email to