Skip to content

Decompressing gzip stream from node-fetch response leads to different output in Deno vs Node #20456

Closed
@dsherret

Description

@dsherret

package.json

{
  "dependencies": {
    "node-fetch": "^3.3.2"
  }
}

main.mjs

import crypto from "node:crypto";
import fs from "node:fs";
import zlib from "node:zlib";
import { pipeline } from 'node:stream';
import { promisify } from 'node:util'
import fetch from "node-fetch";

const streamPipeline = promisify(pipeline);

try {
  fs.unlinkSync("./schema-engine.exe");
} catch {}

const response = await fetch('https://binaries.prisma.sh/all_commits/2804dc98259d2ea960602aca6b8e7fdc03c1758f/windows/schema-engine.exe.gz');
const gunzip = zlib.createGunzip();
gunzip.on("error", (err) => console.log(err));
streamPipeline(response.body, gunzip);
const output = fs.createWriteStream("./schema-engine.exe");
const writeStream = gunzip.pipe(output);
writeStream.on("close", () => {
  console.log("Done");

  getHash("./schema-engine.exe").then((hash) => {
    console.log("Expected: d71565ea5e98b3cbbced66f4220d62bd221fa5cebd038d2875d66c83b29643c6")
    console.log("Actual:   " + hash);
  });
});

function getHash(filePath) {
  const hash = crypto.createHash("sha256");
  const input = fs.createReadStream(filePath);
  return new Promise((resolve) => {
    input.on("readable", () => {
      const data = input.read();
      if (data) {
        hash.update(data);
      } else {
        resolve(hash.digest("hex"));
      }
    });
  });
}
> deno run -A main.mjs
Done
Expected: d71565ea5e98b3cbbced66f4220d62bd221fa5cebd038d2875d66c83b29643c6
Actual:   cdc7fc9c9202eddad3ef16dabddc8f7be2876456baef268f4d32c6042fdfe8e8 <-- this changes between runs
> node main.mjs
Done
Expected: d71565ea5e98b3cbbced66f4220d62bd221fa5cebd038d2875d66c83b29643c6
Actual:   d71565ea5e98b3cbbced66f4220d62bd221fa5cebd038d2875d66c83b29643c6

Causes #20098
Causes #19544

Metadata

Metadata

Labels

bugSomething isn't working correctlynode compat

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions