You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Will Demaine (JIRA)" <ji...@apache.org> on 2015/03/20 00:40:39 UTC
[jira] [Created] (THRIFT-3048) NodeJS decoding of I64 is
inconsistent across protocols
Will Demaine created THRIFT-3048:
------------------------------------
Summary: NodeJS decoding of I64 is inconsistent across protocols
Key: THRIFT-3048
URL: https://issues.apache.org/jira/browse/THRIFT-3048
Project: Thrift
Issue Type: Bug
Components: Node.js - Library
Affects Versions: 0.9.2, 1.0
Reporter: Will Demaine
The NodeJS libraries decode i64 differently between protocols. The {{TCompactProtocol}} returns a {{number}} whereas {{TBinaryProtocol}} and {{TJSONProtocol}} return an {{object}}
Compact: https://github.com/apache/thrift/blob/master/lib/nodejs/lib/thrift/compact_protocol.js#L815
Binary: https://github.com/apache/thrift/blob/master/lib/nodejs/lib/thrift/binary_protocol.js#L273
JSON:
https://github.com/apache/thrift/blob/master/lib/nodejs/lib/thrift/json_protocol.js#L664
This leads to a lack interoperability when switching between protocols:
{code}
service BTest {
bool testMethod (
1: string protocol
2: i64 int64
);
}
{code}
{code:JavaScript}
var handlers = {
testMethod: function(desc, int64, callback) {
console.log(util.format('%s: %d, %s', desc, int64, typeof int64));
callback(null, true);
}
};
var startServer = function(callback){
var serverOptions = {
services: {
'/thrift': {
handler: handlers,
processor: BTest,
protocol: thrift.TCompactProtocol,
transport: thrift.TBufferedTransport
},
'/thrift.binary': {
handler: handlers,
processor: BTest,
protocol: thrift.TBinaryProtocol,
transport: thrift.TBufferedTransport
}
}
};
this.server = thrift.createWebServer(serverOptions);
this.server.listen(9887, function serverCreated(){
callback();
}.bind(this));
};
{code}
Client side:
{code:JavaScript}
compactClient.testMethod('compact small', 123);
binaryClient.testMethod('binary small', 456);
compactClient.testMethod('compact', 4294967297);
binaryClient.testMethod('binary', 4294967297);
compactClient.testMethod('compact large', 3.602879702e16);
binaryClient.testMethod('binary large', 3.602879702e16);
{code}
Results (0.9.2 and 1.0-dev):
{code}
compact small: 1, 123, number, number
binary small: 2, 456, number, object
compact: 4, 4294967297, number, number
binary: 5, 4294967297, number, object
binary large: 8, Infinity, number, object
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)