msgpack / msgpack-javascript

@msgpack/msgpack - MessagePack for JavaScript / msgpack.org[JavaScript/TypeScript/ECMA-262]
https://msgpack.org/
ISC License
1.29k stars 161 forks source link

Invalid integer string convertion from PHP serialized .msgpack #226

Open RemiLelaidier opened 1 year ago

RemiLelaidier commented 1 year ago

Hi,

I am currently working on a project where I serialize JSON objects using the php library msgpack-php, but when I try to deserialize these objects using the javascript library msgpack-javascript, my integers are truncated.

PHP :

$data = [
    '7355750935770677725' => "test",
];

$msg = msgpack_pack($data);

...

JS :

import { decode } from '@msgpack/msgpack';

const decoded = decode(entry);

console.log(decoded)

Result :

{  '7355750935770677000': 'test'  }

As you can see the last three digits of my integer are set to 0.

This seems to be an interoperability problem between the php library and Node.js

BerndAmend commented 1 year ago

Your number is bigger than Number.MAX_SAFE_INTEGER and can therefore not be processed as a JavaScript number. You may need to have a look at the JavaScripts BigInt type and the DecoderOption useBigInt64.