Title: zlib: strictly validate Zstd pledgedSrcSize · Issue #64603 · nodejs/node · GitHub
Open Graph Title: zlib: strictly validate Zstd pledgedSrcSize · Issue #64603 · nodejs/node
X Title: zlib: strictly validate Zstd pledgedSrcSize · Issue #64603 · nodejs/node
Description: Version latest main branch Platform 7.1.3-arch1-3 Subsystem zlib What steps will reproduce the bug? const zlib = require('node:zlib'); const cases = [ { label: 'string', pledgedSrcSize: '1', input: Buffer.alloc(42), }, { label: 'null', p...
Open Graph Description: Version latest main branch Platform 7.1.3-arch1-3 Subsystem zlib What steps will reproduce the bug? const zlib = require('node:zlib'); const cases = [ { label: 'string', pledgedSrcSize: '1', input:...
X Description: Version latest main branch Platform 7.1.3-arch1-3 Subsystem zlib What steps will reproduce the bug? const zlib = require('node:zlib'); const cases = [ { label: 'string', pledgedSrcS...
Opengraph URL: https://github.com/nodejs/node/issues/64603
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"zlib: strictly validate Zstd pledgedSrcSize","articleBody":"### Version\n\nlatest main branch\n\n### Platform\n\n```text\n7.1.3-arch1-3\n```\n\n### Subsystem\n\nzlib\n\n### What steps will reproduce the bug?\n\n```js\n const zlib = require('node:zlib');\n\n const cases = [\n {\n label: 'string',\n pledgedSrcSize: '1',\n input: Buffer.alloc(42),\n },\n {\n label: 'null',\n pledgedSrcSize: null,\n input: Buffer.alloc(42),\n },\n {\n label: 'fractional',\n pledgedSrcSize: 1.9,\n input: Buffer.alloc(1),\n },\n {\n label: 'NaN',\n pledgedSrcSize: NaN,\n input: Buffer.alloc(0),\n },\n {\n label: 'Infinity',\n pledgedSrcSize: Infinity,\n input: Buffer.alloc(0),\n },\n {\n label: 'unsafe integers',\n pledgedSrcSize: Number.MAX_SAFE_INTEGER + 1,\n input: Buffer.alloc(0),\n },\n ];\n\n for (const { label, pledgedSrcSize, input } of cases) {\n try {\n zlib.zstdCompressSync(input, { pledgedSrcSize });\n console.log(`${label}: accepted`);\n } catch (error) {\n console.log(`${label}: ${error.code}`);\n }\n }\n```\n\n### How often does it reproduce? Is there a required condition?\n\nEvery time\n\n### What is the expected behavior? Why is that the expected behavior?\n\npledgedSrcSize represents the expected exact byte length of the uncompressed input. However, the current Zstd binding does not strictly validate this option.Non-number values are silently treated as if the option was omitted, while IntegerValue() implicitly converts values such as fractional numbers and NaN.\n\n### What do you see instead?\n\n string: accepted\n null: accepted\n fraction: accepted\n NaN: accepted\n Infinity: ZSTD_error_srcSize_wrong\n unsafe integer: ZSTD_error_srcSize_wrong\n\n### Additional information\n\n Only undefined or a non-negative safe integer should be accepted.\n\n - Non-number values should throw ERR_INVALID_ARG_TYPE.\n \n - NaN, Infinity, fractional numbers, negative numbers, and unsafe integers should throw ERR_OUT_OF_RANGE.\n \n - Invalid options should be rejected during argument validation rather than producing a later ZSTD_error_srcSize_wrong.\n\nValues above Number.MAX_SAFE_INTEGER should not be accepted because JavaScript cannot represent every integer in that range precisely, while the pledged size represents an exact byte count.","author":{"url":"https://github.com/Archkon","@type":"Person","name":"Archkon"},"datePublished":"2026-07-19T16:17:26Z","url":"https://github.com/nodejs/node/issues/64603"}
| react-profiling | 0 |
| react-import-map | react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf |
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:d1f57205-947d-488b-144f-42f56023584d |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B14A:142296:3332CC:42A40B:6AED1DC5 |
| html-safe-nonce | d1e42a7267ac81942dea148f9ac230923129d55afc14da80a4b1d81db6b51d7a |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCMTRBOjE0MjI5NjozMzMyQ0M6NDJBNDBCOjZBRUQxREM1IiwidmlzaXRvcl9pZCI6IjQwNTE3MTk4MjI0OTU2NTYzNyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 3b5161b51f7c55586634c5cde6563e7baf4bc888e0d9959d2d050b99fb5e971b |
| hovercard-subject-tag | issue:4923435393 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/nodejs/node/64603/issue_layout |
| twitter:image | https://opengraph.githubassets.com/f6fb4636cc16db21bc1cc4c9ea501b2aca101d604c2c3a7db5857221a9c47478/nodejs/node/issues/64603 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/f6fb4636cc16db21bc1cc4c9ea501b2aca101d604c2c3a7db5857221a9c47478/nodejs/node/issues/64603 |
| og:image:alt | Version latest main branch Platform 7.1.3-arch1-3 Subsystem zlib What steps will reproduce the bug? const zlib = require('node:zlib'); const cases = [ { label: 'string', pledgedSrcSize: '1', input:... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | Archkon |
| hostname | github.com |
| expected-hostname | github.com |
| None | e3e0f7f63e50c6fe879198a93a0a023a648ecc0a5e9bc3b5e033ac57172237e6 |
| turbo-cache-control | no-preview |
| go-import | github.com/nodejs/node git https://github.com/nodejs/node.git |
| octolytics-dimension-user_id | 9950313 |
| octolytics-dimension-user_login | nodejs |
| octolytics-dimension-repository_id | 27193779 |
| octolytics-dimension-repository_nwo | nodejs/node |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 27193779 |
| octolytics-dimension-repository_network_root_nwo | nodejs/node |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 707a24b346ac8a82878b9c084efaa38a997660cb |
| ui-target | canary-2 |
| theme-color | #1e2327 |
| color-scheme | light dark |
| react-app-name | issues |
Links:
Viewport: width=device-width