LAZperf 3.4.0

Upstream: https://github.com/hobuinc/laz-perf
Tag: 3.4.0
Commit: b7bbe26109dc986f42d4fc80b8de3d2b6ca634ce
Retrieved: 2026-07-25
License: Apache-2.0 for the LASzip-derived codec, BSD-3-Clause for the
Hobu-authored stream/support files, BSD-2-Clause for the arithmetic coder, and
public domain with BSD/MIT/Apache fallback for portable_endian.hpp. All are
permissive. COPYING contains the upstream Apache-2.0 distribution license, and
NOTICE.txt carries the selected-source notices.

Source archive:
https://github.com/hobuinc/laz-perf/archive/b7bbe26109dc986f42d4fc80b8de3d2b6ca634ce.tar.gz
Size: 4993241 bytes
SHA-256:
17df34ca64cc60e107f0c214db4729c54a514df4e32de5bc1b8b7b7c5a805a56

Selected repository-contained source:
- COPYING
- cpp/lazperf/** (the complete 47-file public-header and library-source tree)

Every selected pristine upstream file and its SHA-256 is recorded in
UPSTREAM_MANIFEST.sha256. The path-sorted manifest is 4546 bytes with SHA-256:
25dec34174ea9ec01899bc7299724819eb94659de264ae1dbce046ff9c7be737

Every selected final repository file and its SHA-256 is recorded in
SOURCE_MANIFEST.sha256. The path-sorted manifest is 4546 bytes with SHA-256:
f7811663db8e3af8a8e02f264855da57c1ed34bca7be56f8024a6d272e002ab2

SceneIO builds an explicit list of the 15 library translation units into one
position-independent static archive. LAZPERF_VENDORED disables upstream's
shared-library export annotations for this private static integration.
Upstream CMake, shared-library targets, tools, examples, tests, benchmarks,
install rules, and downloaded test data are not stored or configured.

Local correctness patch:
- cpp/lazperf/streams.hpp MemoryStream::getByte checks idx against buf.size()
  and throws lazperf::error on exhaustion before indexing.
- cpp/lazperf/decompressor.hpp routes full-range predictor addition through a
  modulo-2^32 helper, computes bounded predictor/corrector arithmetic in int64
  in both decoder branches, and rejects an out-of-range k=31 corrector.
- cpp/lazperf/utils.hpp defines the modulo-2^32 conversion once;
  compressor.hpp, decompressor.hpp, detail/field_point10.cpp,
  detail/field_point14.cpp, and detail/field_xyz.hpp use it for full-range
  coordinate differences and reconstruction. The compressor also derives an
  INT32_MIN magnitude without signed negation, performs its bounded corrector
  fold in int64, and uses an unsigned high-bit shift.

LOCAL_CHANGES.patch records exactly those seven upstream-to-repository file
differences, including the prominent SceneIO modification notice carried by
each changed file. The patch is 13917 bytes with SHA-256:
d35a90f323511ddb371547c4c420bac6390ef90b498d9ccec244f496a9cceb04

The SceneIO wrapper additionally validates container extents and supplies
bounded callbacks before calling the codec.
