[ 
https://issues.apache.org/jira/browse/THRIFT-5812?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Victor updated THRIFT-5812:
---------------------------
    Description: 
I am trying to interact with a Rust Thrift server using a Java client. When 
using the sync client, the server misreads the length of the message and panics 
with a capacity overflow error. However, the async client works fine for some 
reason. It happens on both the compact and binary protocols.

When handling a request, the processor calls the protocol’s 
{{read_message_begin}}, which calls the transport’s {{read}}. There, it reads 
an i32 to check the message length. At this step, for some reason, when the 
message has been sent with a sync client, it reads 82 21 01 04 (the Thrift 
header, that contains the protocol version, message type and sequence id), when 
it has been sent with an async client, it reads 00 00 00 09 (which is the right 
length).

I am not sure whether this is an issue on the Rust or Java side (although I 
think Rust). Also I am reporting it on version 0.17.0 because it is the latest 
available version of thrift on crates.io.

See here for more details and a reproducible example: 
[https://github.com/victorbnl/thrift-rs-capacity-overflow].

  was:
I am trying to interact with a Rust Thrift server using a Java client. When 
using the sync client, the server misreads the length of the message and panics 
with a capacity overflow error. However, the async client works fine for some 
reason. It happens on both the compact and binary protocols.



I am not sure whether this is an issue on the Rust or Java side. Also I am 
reporting it on version 0.17.0 because it is the latest available version of 
thrift on crates.io.

See here for more details and a reproducible example: 
[https://github.com/victorbnl/thrift-rs-capacity-overflow].


> Capacity overflow in Rust server
> --------------------------------
>
>                 Key: THRIFT-5812
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5812
>             Project: Thrift
>          Issue Type: Bug
>          Components: Rust - Library
>    Affects Versions: 0.17.0
>            Reporter: Victor
>            Priority: Major
>
> I am trying to interact with a Rust Thrift server using a Java client. When 
> using the sync client, the server misreads the length of the message and 
> panics with a capacity overflow error. However, the async client works fine 
> for some reason. It happens on both the compact and binary protocols.
> When handling a request, the processor calls the protocol’s 
> {{read_message_begin}}, which calls the transport’s {{read}}. There, it reads 
> an i32 to check the message length. At this step, for some reason, when the 
> message has been sent with a sync client, it reads 82 21 01 04 (the Thrift 
> header, that contains the protocol version, message type and sequence id), 
> when it has been sent with an async client, it reads 00 00 00 09 (which is 
> the right length).
> I am not sure whether this is an issue on the Rust or Java side (although I 
> think Rust). Also I am reporting it on version 0.17.0 because it is the 
> latest available version of thrift on crates.io.
> See here for more details and a reproducible example: 
> [https://github.com/victorbnl/thrift-rs-capacity-overflow].



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

Reply via email to