Skip to content

Nan#14

Closed
trkyshorty wants to merge 26 commits into
Topface:masterfrom
trkyshorty:master
Closed

Nan#14
trkyshorty wants to merge 26 commits into
Topface:masterfrom
trkyshorty:master

Conversation

@trkyshorty

Copy link
Copy Markdown

No description provided.

trkyshorty and others added 26 commits November 28, 2023 10:16
This reverts commit 0657226.
This reverts commit 9150af4.
Enhance the buffer size calculation for LZF compression to handle worst-case scenarios more effectively. In cases where compression is minimal or none, the buffer size needs to be slightly larger than the original data size. To ensure a safer buffer allocation, the buffer size is increased by 6.25% of the input size, plus an additional 64 bytes, and 3 bytes for termination or minor overhead.

Updated calculation:

`size_t bytesCompressed = bytesIn + (bytesIn / 16) + 64 + 3;`

`bytesIn / 16`: Adds 6.25% of the input size to the buffer.
`+ 64`: Accommodates any additional bytes needed by the LZF algorithm.
`+ 3`: Handles termination and other small additions.

This change ensures more reliable compression performance, even in edge cases.
Improve Buffer Size Calculation for LZF Compression
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- port binding from nan to node-addon-api (abi-stable across node majors)
- resolve native binary via node-gyp-build: bundled prebuild first,
  source build fallback
- compress now returns an exact-sized copy instead of a slice view so the
  oversized scratch allocation is not pinned by the returned buffer
- add prebuild github actions workflow (linux-x64, linux-arm64, win32-x64)
- extend tests: roundtrips, compressible/incompressible data, type errors
- add BSD-2-Clause LICENSE retaining Ian Babrou's copyright, credit
  original author in contributors and README, note bundled liblzf
- port binding from nan to node-addon-api (abi-stable across node majors)
- resolve native binary via node-gyp-build: bundled prebuild first,
  source build fallback
- compress now returns an exact-sized copy instead of a slice view so the
  oversized scratch allocation is not pinned by the returned buffer
- add prebuild github actions workflow (linux-x64, linux-arm64, win32-x64)
- extend tests: roundtrips, compressible/incompressible data, type errors
- add BSD-2-Clause LICENSE retaining Ian Babrou's copyright, credit
  original author in contributors and README, note bundled liblzf
- compressAsync/decompressAsync run on the libuv thread pool via
  Napi::AsyncWorker; promises reject with the same errors sync throws
- decompress expectedLength is now required and validated (integer,
  1..1GiB) — removes the legacy 999MB default allocation footgun
- input buffers validated: non-buffer, empty, >1GiB throw TypeError
- corrupted input and too-small-output errors are now distinguished
  via errno (EINVAL vs E2BIG) with descriptive messages
- results wrapped zero-copy (Buffer::NewOrCopy over malloc'd memory,
  shrunk with realloc) instead of allocate-then-copy
- bundled TypeScript definitions (index.d.ts)
- test suite rewritten on node:test: roundtrips, 300-case fuzz,
  corrupted/garbage input safety, async paths, concurrency, fixed
  wire-format decode vectors
- benchmark rewritten against built-in zlib (deflateRaw 1/6), zero
  deps, deterministic datasets; README updated with fresh numbers
- ci: darwin-arm64 prebuild job, dependabot for actions and npm
# Conflicts:
#	src/lzf.cc
@trkyshorty trkyshorty closed this Jul 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant