[
https://issues.apache.org/jira/browse/THRIFT-6102?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dmytro Shteflyuk updated THRIFT-6102:
-------------------------------------
Component/s: Ruby - Library
> Ruby CompactProtocol should report malformed headers consistently
> -----------------------------------------------------------------
>
> Key: THRIFT-6102
> URL: https://issues.apache.org/jira/browse/THRIFT-6102
> Project: Thrift
> Issue Type: Bug
> Components: Ruby - Library
> Reporter: Dmytro Shteflyuk
> Assignee: Dmytro Shteflyuk
> Priority: Major
> Time Spent: 10m
> Remaining Estimate: 0h
>
> h3. Problem
> {{Thrift::CompactProtocol#read_message_begin}} reports malformed
> compact-protocol headers differently depending on whether {{thrift_native}}
> is loaded.
> For an unexpected protocol identifier or version, the native implementation
> raises {{ProtocolException}} with type {{-1}} and a message. The pure-Ruby
> implementation passes its explanatory text as the first constructor argument,
> which is the exception type, leaving {{message}} empty.
> Neither mode reports the documented {{ProtocolException::BAD_VERSION}} type,
> and the exception metadata differs between the two implementations.
> h3. Client impact
> Ruby clients that rescue {{ProtocolException}} and inspect {{type}} cannot
> reliably identify malformed compact-protocol headers. The diagnostic message
> is also unavailable in pure-Ruby mode, while native mode may produce a
> different message for an incompatible version.
> This makes error handling and diagnostics depend on whether the native
> extension is installed.
> h3. Reproduction
> {code:ruby}
> require "thrift"
> transport = Thrift::MemoryBufferTransport.new([0x00].pack("C"))
> protocol = Thrift::CompactProtocol.new(transport)
> begin
> protocol.read_message_begin
> rescue Thrift::ProtocolException => error
> p [error.type, error.message]
> end
> {code}
> With {{thrift_native}} loaded, the result is a type of {{-1}} with a
> descriptive message. Without the native extension, the descriptive text is
> stored in {{type}} and {{message}} is {{nil}}.
> h3. Expected behavior
> Both implementations should raise {{ProtocolException}} with
> {{ProtocolException::BAD_VERSION}} for an invalid compact protocol identifier
> or version. They should also provide the same descriptive message, including
> the expected and received values.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)