[ 
https://issues.apache.org/jira/browse/THRIFT-6118?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dmytro Shteflyuk resolved THRIFT-6118.
--------------------------------------
    Fix Version/s: 0.25.0
       Resolution: Fixed

> Ruby ProtocolDecorator should forward message begin arguments
> -------------------------------------------------------------
>
>                 Key: THRIFT-6118
>                 URL: https://issues.apache.org/jira/browse/THRIFT-6118
>             Project: Thrift
>          Issue Type: Bug
>          Components: Ruby - Library
>            Reporter: Dmytro Shteflyuk
>            Assignee: Dmytro Shteflyuk
>            Priority: Major
>             Fix For: 0.25.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> h3. Problem
> {{Thrift::ProtocolDecorator#write_message_begin}} accepts the message name, 
> message type, and sequence ID, but calls the decorated protocol's 
> {{write_message_begin}} method without any arguments.
> The decorated protocol requires all three values, so a concrete decorator 
> relying on the module's default implementation raises {{ArgumentError}} 
> instead of beginning the message. {{MultiplexedProtocol}} overrides this 
> method, which prevents the defect from appearing in its usual code path, but 
> other or third-party decorators using the shared implementation remain 
> affected.
> h3. Client impact
> A Ruby client using such a protocol decorator cannot serialize an outbound 
> message. The failure occurs before the message body is written, so the RPC 
> cannot be sent through that decorator.
> h3. Reproduction
> {code:ruby}
> require "thrift"
> protocol = Object.new
> def protocol.write_message_begin(name, type, seqid)
> end
> decorator_class = Class.new(Thrift::BaseProtocol) do
>   include Thrift::ProtocolDecorator
> end
> decorator = decorator_class.new(protocol)
> decorator.write_message_begin("method", Thrift::MessageTypes::CALL, 42)
> {code}
> Current result:
> {noformat}
> ArgumentError: wrong number of arguments (given 0, expected 3)
> {noformat}
> The exception originates from {{ProtocolDecorator#write_message_begin}} 
> invoking the decorated method with zero arguments.
> h3. Expected behavior
> {{ProtocolDecorator#write_message_begin}} should forward the message name, 
> message type, and sequence ID unchanged to the decorated protocol. A focused 
> contract test should verify the exact positional values.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to