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/08 13:30:00 UTC
[jira] [Resolved] (THRIFT-6140) Ruby SimpleServer stops after a short JSON UUID value
[ https://issues.apache.org/jira/browse/THRIFT-6140?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dmytro Shteflyuk resolved THRIFT-6140.
--------------------------------------
Fix Version/s: 0.25.0
Resolution: Fixed
> Ruby SimpleServer stops after a short JSON UUID value
> -----------------------------------------------------
>
> Key: THRIFT-6140
> URL: https://issues.apache.org/jira/browse/THRIFT-6140
> 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
> Ruby JSONProtocol raises EOFError when it reads a complete JSON UUID string shorter than 36 characters. SimpleServer only treats Thrift transport and protocol exceptions as per-connection failures, so this error escapes the connection boundary and stops the serving loop.
> h3. Client impact
> A malformed JSON request containing a short UUID value stops the server loop instead of rejecting only that client connection. Valid UUID values are unaffected.
> h3. Reproduction
> Testing on master commit {{a9663bc6661a5dd1d99d629e1f269c1907592a1a}} produces:
> {code:ruby}
> require "thrift"
> class ReproProcessor
> def process(input, _output)
> input.read_message_begin
> input.skip(Thrift::Types::STRUCT)
> end
> end
> class ReproServerTransport
> def initialize
> @accepts = 0
> end
> def listen; end
> def close; end
> def accept
> @accepts += 1
> throw :continued if @accepts > 1
> Thrift::MemoryBufferTransport.new(
> %q([1,"unknown",1,1,{"1":{"uid":"x"}}])
> )
> end
> end
> begin
> catch(:continued) do
> Thrift::SimpleServer.new(
> ReproProcessor.new,
> ReproServerTransport.new,
> nil,
> Thrift::JsonProtocolFactory.new
> ).serve
> end
> rescue => error
> puts "#{error.class}: #{error.message}"
> end
> {code}
> {noformat}
> EOFError: EOFError
> {noformat}
> h3. Expected behavior
> A complete but malformed UUID value should be rejected as Thrift::ProtocolException::INVALID_DATA. SimpleServer should close the malformed connection and continue accepting clients, while valid UUID values continue to round-trip.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)