Simon South created THRIFT-2680:
-----------------------------------
Summary: c_glib: ThriftFramedTransport fails when peer
unexpectedly closes connection
Key: THRIFT-2680
URL: https://issues.apache.org/jira/browse/THRIFT-2680
Project: Thrift
Issue Type: Bug
Components: C glib - Library
Affects Versions: 0.9.1
Environment: Fedora 20 64-bit on x86_64
Reporter: Simon South
Priority: Minor
Working on the integration test suite for c_glib exposed a problem with
ThriftFramedTransport: If the peer closes the connection unexpectedly,
{{thrift_framed_transport_read_frame}} will fail with either a critical GLib
warning or a segmentation fault.
The attached patches fix this issue. The changes are, in order:
1. Add a suitable test case to {{testframedtransport.c}}.
2. Modify {{thrift_framed_transport_read_frame}} and
{{thrift_framed_transport_read_frame_slow}} so they check for and respond to
errors returned from other Thrift methods. Additionally,
{{thrift_framed_transport_read_frame_slow}} should now always return -1 in case
of read error, which includes "successfully" reading zero bytes from the peer
(which generally indicates a prematurely closed connection).
I've also taken the liberty of gently rewriting
{{thrift_framed_transport_read_frame}} so it
* Correctly uses an unsigned integer variable to hold the frame's size,
* Uses {{thrift_transport_...}} functions to invoke class methods instead of
the rather brittle practice of dereferencing class members directly, and
* Accurately reports success or failure.
--
This message was sent by Atlassian JIRA
(v6.2#6252)