You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Marcin Pajkowski (Jira)" <ji...@apache.org> on 2019/12/02 09:29:00 UTC
[jira] [Comment Edited] (THRIFT-4915) Deserializing double into
OrderedFloat always returns zero when using TCompactProtocol
[ https://issues.apache.org/jira/browse/THRIFT-4915?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16985925#comment-16985925 ]
Marcin Pajkowski edited comment on THRIFT-4915 at 12/2/19 9:28 AM:
-------------------------------------------------------------------
I've just noticed similar issue - but in my case Rust's lib is actually a sender.
It seems that Rust uses big endian for encoding/decoding doubles. However, mainstream libraries tend to use little endian.
Some examples:
* Python
** write double: [https://github.com/apache/thrift/blob/master/lib/py/src/protocol/TCompactProtocol.py#L278]
** read double: [https://github.com/apache/thrift/blob/master/lib/py/src/protocol/TCompactProtocol.py#L416]
* C++ (please also take a look at macros in TProtocol.h)
** write double: [https://github.com/apache/thrift/blob/master/lib/cpp/src/thrift/protocol/TCompactProtocol.tcc#L255]
** read double: [https://github.com/apache/thrift/blob/master/lib/cpp/src/thrift/protocol/TCompactProtocol.tcc#L655]
was (Author: mpajkowski):
I've just noticed similar issue - but in my case Rust's lib is actually a sender.
It seems that Rust uses big endian for encoding/decoding doubles. However, mainstream libraries tend to use little endian.
Some examples:
* Python
** write double: [https://github.com/apache/thrift/blob/master/lib/py/src/protocol/TCompactProtocol.py#L278]
** read double: [https://github.com/apache/thrift/blob/master/lib/py/src/protocol/TCompactProtocol.py#L416]
* C++ (please also take a look at macros in TProtocol.h)
** write double: [https://github.com/apache/thrift/blob/master/lib/cpp/src/thrift/protocol/TCompactProtocol.tcc#L255]
** read double: [https://github.com/apache/thrift/blob/master/lib/cpp/src/thrift/protocol/TCompactProtocol.tcc#L655]
> Deserializing double into OrderedFloat always returns zero when using TCompactProtocol
> --------------------------------------------------------------------------------------
>
> Key: THRIFT-4915
> URL: https://issues.apache.org/jira/browse/THRIFT-4915
> Project: Thrift
> Issue Type: Bug
> Components: Rust - Library
> Affects Versions: 0.12.0
> Reporter: ziming.wu
> Priority: Major
>
> Client: Rust + Thrift 0.12.0
> Server: CPP + Thrift 0.9.3
> Protocol: TCompactProtocol
> Transport: TBufferedTransport
>
> I logged before cpp server response to rust client
>
> {code:java}
> "age=21.339611053466797"
> {code}
> but client recieved
>
>
>
> {code:java}
> age: Some(OrderedFloat(0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000409415354256))
> {code}
> This bug only happens when using TCompactProtocol.
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)