I have this code in Python:
import zlib
raw = bytes.fromhex("789C34C9410AC2301005D0BBFC752289A88BB94A53CAD8061B48D3329D2A1A7277DDB87BF02A14548E9C0DF63FD60DE49DC104AA98238BDE23EB908A467972065DFCF9FAFB4185C708EAD0053C58E38BDF7693C92E9C8A9DFDE716606AC0924659F7007227D77AF4AD7D010000FFFF")
buffer = bytearray()
inflator = zlib.decompressobj()
buffer.extend(raw)
msg = inflator.decompress(buffer)
print("[buffer] ", msg)
Result:
[buffer] b'{"t":null,"s":null,"op":10,"d":{"heartbeat_interval":41250,"_trace":["[\"gateway-prd-main-h1z6\",{\"micros\":0.0}]"]}}'
That data could be successfully decompressed in Python.
Then I have similar code in javascript (typescript):
import zlib from "zlib"
const raw = "789C34C9410AC2301005D0BBFC752289A88BB94A53CAD8061B48D3329D2A1A7277DDB87BF02A14548E9C0DF63FD60DE49DC104AA98238BDE23EB908A467972065DFCF9FAFB4185C708EAD0053C58E38BDF7693C92E9C8A9DFDE716606AC0924659F7007227D77AF4AD7D010000FFFF";
let msg;
let buffer;
buffer = Buffer.from(raw, "hex");
msg = zlib.inflateSync(buffer);
console.log("[buffer] " + msg.toString("utf-8"));
Result:
Error: unexpected end of file
at Zlib.zlibOnError [as onerror] (node:zlib:190:17)
at processChunkSync (node:zlib:456:12)
at zlibBufferSync (node:zlib:178:12)
at Object.syncBufferWrapper [as inflateSync] (node:zlib:791:14)
at Object.
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Module.m._compile (C:\Users\hanziKR Developer\AppData\Roaming\npm\node_modules\ts-node\src\index.ts:1455:23)
at Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Object.require.extensions. [as .ts]
at Module.load (node:internal/modules/cjs/loader:981:32) {
errno: -5,
code: 'Z_BUF_ERROR'
}
There it has an error. Why is there an error in one, but not the other?
Because your Python code is ignoring the error. In both cases your zlib stream ends prematurely.