Dmytro Shteflyuk created THRIFT-6110:
----------------------------------------

             Summary: Ruby HTTP client transport should reject empty successful 
responses
                 Key: THRIFT-6110
                 URL: https://issues.apache.org/jira/browse/THRIFT-6110
             Project: Thrift
          Issue Type: Bug
          Components: Ruby - Library
            Reporter: Dmytro Shteflyuk
            Assignee: Dmytro Shteflyuk


h3. Problem

{{Thrift::HTTPClientTransport}} accepts an HTTP response with a successful 
status and then assumes that it contains a body. A 204 response has no body, 
and some 200 responses may carry an empty body. In the nil-body case, the 
transport passes {{nil}} to the binary-string helper and raises an 
implementation-level {{NoMethodError}} instead of a Thrift transport exception.

h3. Client impact

A Ruby client calling a service through the HTTP transport can receive a 
confusing, unrelated exception when an intermediary or endpoint returns a 
successful response without a Thrift payload. Callers cannot consistently 
handle this as a transport failure, and the original HTTP-response context is 
obscured.

h3. Reproduction

{code}
# Server response:
HTTP/1.1 204 No Content

# Ruby client:
transport = Thrift::HTTPClientTransport.new("http://localhost:8080/service";)
transport.write("request")
transport.flush

# current:
# undefined method 'encoding' for nil (NoMethodError)
#
# desired:
# raises Thrift::TransportException for an empty successful response
{code}

The same typed failure should apply to a 200 response whose body is an empty 
string. Existing non-2xx handling and normal non-empty Thrift responses should 
remain unchanged.

h3. Expected behavior

After a successful HTTP response, the transport should reject a missing or 
empty body with {{Thrift::TransportException}} rather than trying to treat it 
as a binary buffer.



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

Reply via email to