[
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)