Commit Graph

3079 Commits

Author SHA1 Message Date
Adam Hathcock
f41cc208cc Pool LZMA workspaces and streamline 7z metadata writing
Reuse LZMA2 trial decoders and pooled compressed output, pool and consolidate decoder probability banks, lazily rent encoder optimization scratch, and avoid copying direct async memory writes.

Use bounded stack scratch and stream 7z metadata without temporary property buffers. Add ownership, failure, context-shrink, Unicode, and block-boundary regressions.

Document allocation profiles, the small-file LZMA2 throughput tradeoff, and rejection of exact-size match-finder arrays. Validation: 3,016 .NET 10 tests passed; all library targets, net48 tests, and performance project compile; formatting checks pass.
2026-10-20 08:28:23 +01:00
Adam Hathcock
030569611e Reduce 7z copy and LZMA decoder allocations
Pool writer CRC-copy buffers, use memory-based async read overloads on modern targets, reuse LZMA2 decoders across resets, and initialize probability-model banks lazily.

Add reset/property-change, memory-read, writer boundary/CRC, and growth regression coverage. Document staged profiling results and rejection of dictionary-growth policies that regress small-file allocations.

Validation: 2,997 .NET 10 Release tests passed, all library targets built, net48 tests compiled, and formatting checks passed.
2026-10-19 15:11:47 +01:00
Adam Hathcock
14d77b671c Release pooled 7z decoder buffers across async and partial reads
Dispose cached folder decoders during async archive cleanup and scope temporary encoded-header decoders in both read paths. Release LZMA range-decoder input buffers on partial reads and failures while preserving borrowed source ownership.

Correct the synchronous extraction-reader benchmark and expand lifetime and checksum coverage. Document profiling showing async Archive allocations falling from 8.95 MiB to 0.70 MiB per extraction, with metadata-only allocations reduced by 70%.

Validation: 2,989 .NET 10 Release tests passed; all library targets, the performance project, and net48 test compilation succeeded. Formatting and whitespace checks passed.
2026-10-19 14:43:51 +01:00
Adam Hathcock
0fbf36d602 Merge remote-tracking branch 'origin/release'
# Conflicts:
#	src/SharpCompress/Compressors/LZMA/LZ/LzOutWindow.cs
#	src/SharpCompress/Compressors/LZMA/LzmaStream.cs
2026-10-19 11:15:09 +01:00
Adam Hathcock
542ed974d4 Merge pull request #1458 from adamhathcock/adam/release-fixes
fixes for release
0.50.6
2026-10-19 11:05:44 +01:00
Adam Hathcock
2168385f2e fixes for release 2026-10-19 10:52:07 +01:00
Adam Hathcock
560a148ddb Merge pull request #1455 from romaklayt/perf/source-stream-cache-length
Read each SourceStream part's length once
2026-10-19 10:36:22 +01:00
Adam Hathcock
999676d9c9 Merge pull request #1457 from romaklayt/perf/zip-winzip-aes-reader
Speed up reading WinZip AES zip entries
2026-10-19 10:34:55 +01:00
Adam Hathcock
2fe5f3a4e8 Merge commit from fork
Reject truncated LZMA2 headers and prevent stalled decoding
2026-10-19 10:27:41 +01:00
Adam Hathcock
7642f76f38 changes fixes to use pooled arrays 2026-10-19 10:10:09 +01:00
Adam Hathcock
4966fc186b Merge branch 'release' into fix/lzma2-truncated-header
# Conflicts:
#	src/SharpCompress/Compressors/LZMA/LZ/LzOutWindow.cs
2026-10-19 09:59:33 +01:00
Adam Hathcock
08f54e6245 Merge pull request #1454 from adamhathcock/feature/reduce-archive-allocations
Reduce archive allocations across types
2026-10-19 09:51:51 +01:00
Adam Hathcock
c6d8c76b14 Review changes around disposal 2026-10-19 09:43:44 +01:00
Adam Hathcock
26d482f785 Merge remote-tracking branch 'origin/master' into feature/reduce-archive-allocations 2026-10-19 09:13:03 +01:00
Adam Hathcock
431ff80adc Merge pull request #1456 from adamhathcock/fix/lzma-codefast-bounds-checks 2026-10-16 20:47:34 +01:00
Adam Hathcock
1fc4a7cdf1 Remove unsupported LZMA terminal-error guarantees 2026-10-16 16:03:00 +01:00
Adam Hathcock
a83022ca17 Preserve frozen stream recordings during TAR probing 2026-10-16 15:57:21 +01:00
Adam Hathcock
d4234a2b35 Guard LZMA CodeFast dictionary accesses 2026-10-16 15:50:17 +01:00
Adam Hathcock
7fc5c0e565 Use pooled memory streams for temporary production buffers 2026-10-16 15:44:44 +01:00
Adam Hathcock
2369f10b63 Grow LZMA dictionary storage only as decoded history requires 2026-10-16 15:39:56 +01:00
Adam Hathcock
8a9b76dd44 Grow Shrink output from decoded bytes and stop at input EOF 2026-10-16 15:35:27 +01:00
Adam Hathcock
0860da8bc5 Buffer ARC LZW input incrementally and reject truncated entries 2026-10-16 15:34:07 +01:00
Adam Hathcock
9b0be6f984 Skip ZIP64 extensible data without size-driven allocations 2026-10-16 15:33:10 +01:00
Adam Hathcock
bc1ade2bbc Reject truncated LZMA2 headers and prevent stalled decoding 2026-10-16 15:23:57 +01:00
Adam Hathcock
9bb74557d5 Fix TAR probe cleanup and preserve active recording sessions 2026-10-16 15:08:36 +01:00
Roma Kolyago
e7421f5daa Read each SourceStream part's length once 2026-10-16 16:04:44 +03:00
Roma Kolyago
589c887ad0 Speed up reading WinZip AES zip entries 2026-10-16 13:25:25 +03:00
Adam Hathcock
c593d00651 Prevent unnecessary recording start in TarReader.Factory
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-16 09:40:21 +01:00
Adam Hathcock
8f5348f359 Merge pull request #1452 from romaklayt/fix/zip-encrypted-data-descriptor
Read encrypted zip entries written with a data descriptor
2026-10-16 08:42:07 +01:00
Roma Kolyago
ed202ba48c Read encrypted zip entries written with a data descriptor 2026-10-15 22:55:17 +03:00
Adam Hathcock
07de36b505 Pool ZIP directory search buffers and bound signature scans 2026-10-15 16:49:30 +01:00
Adam Hathcock
454ec7e98b Dispose 7Zip reader decoders without closing borrowed volumes 2026-10-15 16:49:30 +01:00
Adam Hathcock
7505ba7e5f Release TAR probe buffers and avoid buffering seekable inputs 2026-10-15 16:49:30 +01:00
Adam Hathcock
77490536ae Fix async RAR unpacker buffer disposal 2026-10-15 16:48:47 +01:00
Adam Hathcock
211ce28f40 Merge pull request #1448 from adamhathcock/adam/merge-release-and-update-dependencies
Merge release fixes and update dependencies
2026-10-13 13:34:30 +01:00
Adam Hathcock
e58fcb23e5 Preserve async disposal across all supported frameworks 2026-10-13 12:57:14 +01:00
Adam Hathcock
3bbe0cc93f Use STREAM_DISPOSEASYNC capability guards for stream disposal 2026-10-13 12:41:38 +01:00
Adam Hathcock
d431c80b38 Fix WinZip AES authentication retry after cancellation 2026-10-13 12:23:24 +01:00
Adam Hathcock
a47e02e4cd Merge branch 'master' into adam/release-dependencies-and-async-stream-fixes 2026-10-13 11:40:46 +01:00
Adam Hathcock
1fb8ac1724 Merge remote-tracking branch 'origin/release'
# Conflicts:
#	src/SharpCompress/Compressors/LZMA/LzmaStream.Async.cs
#	src/SharpCompress/Compressors/LZMA/LzmaStream.cs
2026-10-13 11:39:15 +01:00
Adam Hathcock
1080969e51 Fix async writable entry streams and cross-framework disposal 2026-10-13 11:36:07 +01:00
Adam Hathcock
9ed27b9a7b Update dependencies and address threading analyzer findings 2026-10-13 11:18:34 +01:00
Adam Hathcock
cd9ce9ad94 Merge pull request #1443 from adamhathcock/fix/1441-sevenzip-libarchive-attributes
Fix 7z writer attribute interoperability with libarchive
2026-10-13 11:12:10 +01:00
Adam Hathcock
ba8d0f84b1 Merge remote-tracking branch 'origin/release'
# Conflicts:
#	src/SharpCompress/Common/GZip/GZipChecksumValidationStream.cs
#	src/SharpCompress/Common/Zip/WinzipAesCryptoStream.Async.cs
#	src/SharpCompress/Common/Zip/WinzipAesCryptoStream.cs
#	src/SharpCompress/Compressors/Deflate/ZlibBaseStream.cs
2026-10-13 11:00:17 +01:00
Adam Hathcock
9aa94c4345 Merge pull request #1447 from adamhathcock/fix/pooled-buffer-lifetimes
Fix pooled buffer ownership and exception-safe cleanup
2026-10-13 10:55:50 +01:00
Adam Hathcock
b4a2e2a254 Protect earlier ADC and RAR rentals when later allocation fails 2026-10-13 10:34:14 +01:00
Adam Hathcock
b91671dfc3 Release partially constructed 7z decoder streams on failure 2026-10-13 10:31:15 +01:00
Adam Hathcock
bdb42df4dc Make raw LZMA setup and disposal exception-safe 2026-10-13 10:29:07 +01:00
Adam Hathcock
38e3222dc2 Release rewind buffers despite disposal failures and reject disposed reads 2026-10-13 10:26:09 +01:00
Adam Hathcock
b3fac7e04a Release owned Squeeze buffers and failed PPMd models 2026-10-13 10:24:19 +01:00