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)