You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@thrift.apache.org by "Dmytro Shteflyuk (Jira)" <ji...@apache.org> on 2026/08/24 01:26:00 UTC

[jira] [Created] (THRIFT-6156) Ruby JsonProtocol leaks ArgumentError for malformed Base64 data

Dmytro Shteflyuk created THRIFT-6156:
----------------------------------------

             Summary: Ruby JsonProtocol leaks ArgumentError for malformed Base64 data
                 Key: THRIFT-6156
                 URL: https://issues.apache.org/jira/browse/THRIFT-6156
             Project: Thrift
          Issue Type: Bug
          Components: Ruby - Library
            Reporter: Dmytro Shteflyuk
            Assignee: Dmytro Shteflyuk


h3. Problem

Ruby's {{JsonProtocol#read_json_base64}} decodes JSON binary values with strict Base64 decoding. When the wire value contains an invalid alphabet or invalid padding, Ruby's {{ArgumentError}} escapes directly instead of being translated into a typed Thrift protocol exception.

h3. Client impact

Ruby clients and servers cannot handle malformed JSON binary values through the normal Thrift protocol-error path. When this occurs while a processor is reading method arguments, the implementation exception can be treated as a generic application failure rather than invalid protocol data, producing inconsistent diagnostics and error handling.

h3. Reproduction

{code:language=bash}
cd lib/rb
bundle exec ruby -Ilib -e 'require "thrift"; protocol = Thrift::JsonProtocol.new(Thrift::MemoryBufferTransport.new(%q{"%"})); begin; protocol.read_json_base64; rescue => error; warn "#{error.class}: #{error.message}"; end'
{code}

Testing on master commit {{04c87e89ae25e759123b942d2d73e4cc3415c948}} produces:

{code}
ArgumentError: invalid base64
{code}

h3. Expected behavior

Malformed Base64 in a JSON binary value should raise {{ProtocolException}} with type {{INVALID_DATA}}, consistently with other invalid JSON protocol data. Valid Base64, including the currently supported optional padding, should continue to decode unchanged.




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