Fix three BLAKE2sp correctness bugs and eliminate allocations in hot path#1266
Conversation
Code Review SummaryStatus: No Issues Found | Recommendation: Merge OverviewThe PR fixes three correctness bugs in the BLAKE2sp implementation and adds performance optimizations. The changes are well-designed and properly address the issues described. Bug Fixes Verified
Optimizations
Changes Since Last Review
Files Reviewed (2 files)
|
…path 1. Fix off-by-one in Update(BLAKE2SP): pos was masked with 448 (64×7) instead of 511 (64×8−1), causing incorrect leaf assignment when update chunks are not multiples of 64 bytes. This produced wrong hashes whenever streaming reads didn't align to 64-byte boundaries. 2. Fix double-finalization when Read() is called again after returning 0. Final() was called unconditionally on each EOF read, re-running compression on an already-finalized state and corrupting the hash. EnsureHash() guards with a null-check and is idempotent; both sync and async Read paths share the fix. _blake2sp is set to null after finalization so any erroneous post-final calls fail fast rather than silently corrupting state. 3. Fix false-positive CRC check when stream is not fully drained. _hash was initialized to fileHeader.FileCrc in the constructor, so GetCrc() returned the expected CRC rather than the computed one if the stream was abandoned early. The check would then compare the expected hash against itself and always succeed, silently accepting a corrupt or incomplete file. _hash is now null until the stream is fully read; GetCrc() throws if called early rather than returning a misleading value. Additional changes: - Compress: stackalloc m/v arrays instead of heap; LE fast path via MemoryMarshal.Cast replaces 16 BitConverter.ToUInt32 calls per block - Final(BLAKE2S): write directly to Span<byte>, eliminating MemoryStream and BitConverter.GetBytes allocations; 8 leaf digests now stackalloc'd - Inner classes and fields: private, sealed, readonly where applicable
|
adam- i think maybe the repo has an issue that could be affecting my pull req: IArchiveExtensions.cs(36,22): error IDE0051: Private member 'IArchiveExtensions.extension(IArchive).WriteToDirectoryInternal' is unused |
|
Looks like I need to fix master. I'm pretty I did a fix for release. Thanks for this. I'll push things and merge later today. |
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [SharpCompress](https://github.com/adamhathcock/sharpcompress) | `0.48.1` → `0.49.1` |  |  | --- ### Release Notes <details> <summary>adamhathcock/sharpcompress (SharpCompress)</summary> ### [`v0.49.1`](https://github.com/adamhathcock/sharpcompress/releases/tag/0.49.1): - More fixes [Compare Source](adamhathcock/sharpcompress@0.49.0...0.49.1) #### What's Changed - Close writable entry streams during async archive disposal by [@​Copilot](https://github.com/Copilot) in [#​1338](adamhathcock/sharpcompress#1338) - Restore `WriteToDirectoryAsync` progress callbacks for solid 7z archives by [@​Copilot](https://github.com/Copilot) in [#​1340](adamhathcock/sharpcompress#1340) - Try to fix global.json to avoid churn in locks by [@​adamhathcock](https://github.com/adamhathcock) in [#​1341](adamhathcock/sharpcompress#1341) - Fix tar archive enumeration after fully reading entry streams by [@​adamhathcock](https://github.com/adamhathcock) in [#​1342](adamhathcock/sharpcompress#1342) **Full Changelog**: <adamhathcock/sharpcompress@0.49.0...0.49.1> ### [`v0.49.0`](https://github.com/adamhathcock/sharpcompress/releases/tag/0.49.0): - Write Async fixes and more. [Compare Source](adamhathcock/sharpcompress@0.48.1...0.49.0) This should contain a lot of write async fixes and some breaking API changes that fix previous broke `net48` usage #### What's Changed - Rename IWriteableArchiveFactory.cs to IWritableArchiveFactory.cs by [@​Copilot](https://github.com/Copilot) in [#​1244](adamhathcock/sharpcompress#1244) - Some API clean up from GPT 5.4 by [@​adamhathcock](https://github.com/adamhathcock) in [#​1243](adamhathcock/sharpcompress#1243) - Release to master by [@​adamhathcock](https://github.com/adamhathcock) in [#​1267](adamhathcock/sharpcompress#1267) - Fix three BLAKE2sp correctness bugs and eliminate allocations in hot path by [@​coderb](https://github.com/coderb) in [#​1266](adamhathcock/sharpcompress#1266) - Corrected async examples. by [@​dlemstra](https://github.com/dlemstra) in [#​1277](adamhathcock/sharpcompress#1277) - Fix setting invalid access time fails extraction by [@​aromaa](https://github.com/aromaa) in [#​1279](adamhathcock/sharpcompress#1279) - Fix incorrect code examples in docs for sync/async usage by [@​Copilot](https://github.com/Copilot) in [#​1280](adamhathcock/sharpcompress#1280) - Replace APPNOTE.TXT contents with reference link note by [@​puk06](https://github.com/puk06) in [#​1286](adamhathcock/sharpcompress#1286) - Release to Master by [@​adamhathcock](https://github.com/adamhathcock) in [#​1274](adamhathcock/sharpcompress#1274) - update docs for tar gap analysis and XZ usage by [@​adamhathcock](https://github.com/adamhathcock) in [#​1288](adamhathcock/sharpcompress#1288) - Add a PooledMemoryStream to avoid allocating by [@​adamhathcock](https://github.com/adamhathcock) in [#​1275](adamhathcock/sharpcompress#1275) - fix: Change LeaveStreamOpen default from true to false by [@​puk06](https://github.com/puk06) in [#​1293](adamhathcock/sharpcompress#1293) - Fix usage of ReaderOptions and pre-defined values by [@​adamhathcock](https://github.com/adamhathcock) in [#​1295](adamhathcock/sharpcompress#1295) - Enforce seekable, readable and writable on streams by [@​adamhathcock](https://github.com/adamhathcock) in [#​1297](adamhathcock/sharpcompress#1297) - Add ArchiveInformation record for consolidated archive detection and capability inspection by [@​Copilot](https://github.com/Copilot) in [#​1299](adamhathcock/sharpcompress#1299) - merge release to master by [@​adamhathcock](https://github.com/adamhathcock) in [#​1314](adamhathcock/sharpcompress#1314) - Some clean up and test clean up by [@​adamhathcock](https://github.com/adamhathcock) in [#​1321](adamhathcock/sharpcompress#1321) - Finish Write Async by [@​adamhathcock](https://github.com/adamhathcock) in [#​1323](adamhathcock/sharpcompress#1323) - More complete Tar implementation: USTAR, PAX, etc. by [@​adamhathcock](https://github.com/adamhathcock) in [#​1289](adamhathcock/sharpcompress#1289) - Add Polysharp and adjustments that do not break legacy frameworks by [@​adamhathcock](https://github.com/adamhathcock) in [#​1330](adamhathcock/sharpcompress#1330) - Fix null `IVolume.FileName` for single-volume file-based archives by [@​Copilot](https://github.com/Copilot) in [#​1333](adamhathcock/sharpcompress#1333) - Add skills by [@​adamhathcock](https://github.com/adamhathcock) in [#​1332](adamhathcock/sharpcompress#1332) - add AOT smoke and missing tests by [@​adamhathcock](https://github.com/adamhathcock) in [#​1334](adamhathcock/sharpcompress#1334) #### New Contributors - [@​dlemstra](https://github.com/dlemstra) made their first contribution in [#​1277](adamhathcock/sharpcompress#1277) - [@​aromaa](https://github.com/aromaa) made their first contribution in [#​1279](adamhathcock/sharpcompress#1279) - [@​puk06](https://github.com/puk06) made their first contribution in [#​1286](adamhathcock/sharpcompress#1286) **Full Changelog**: <adamhathcock/sharpcompress@0.48.1...0.49.0> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNzguMCIsInVwZGF0ZWRJblZlciI6IjQzLjE3OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=--> Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/123
Updated [SharpCompress](https://github.com/adamhathcock/sharpcompress) from 0.48.1 to 0.49.0. <details> <summary>Release notes</summary> _Sourced from [SharpCompress's releases](https://github.com/adamhathcock/sharpcompress/releases)._ ## 0.49.0 This should contain a lot of write async fixes and some breaking API changes that fix previous broke `net48` usage ## What's Changed * Rename IWriteableArchiveFactory.cs to IWritableArchiveFactory.cs by @Copilot in adamhathcock/sharpcompress#1244 * Some API clean up from GPT 5.4 by @adamhathcock in adamhathcock/sharpcompress#1243 * Release to master by @adamhathcock in adamhathcock/sharpcompress#1267 * Fix three BLAKE2sp correctness bugs and eliminate allocations in hot path by @coderb in adamhathcock/sharpcompress#1266 * Corrected async examples. by @dlemstra in adamhathcock/sharpcompress#1277 * Fix setting invalid access time fails extraction by @aromaa in adamhathcock/sharpcompress#1279 * Fix incorrect code examples in docs for sync/async usage by @Copilot in adamhathcock/sharpcompress#1280 * Replace APPNOTE.TXT contents with reference link note by @puk06 in adamhathcock/sharpcompress#1286 * Release to Master by @adamhathcock in adamhathcock/sharpcompress#1274 * update docs for tar gap analysis and XZ usage by @adamhathcock in adamhathcock/sharpcompress#1288 * Add a PooledMemoryStream to avoid allocating by @adamhathcock in adamhathcock/sharpcompress#1275 * fix: Change LeaveStreamOpen default from true to false by @puk06 in adamhathcock/sharpcompress#1293 * Fix usage of ReaderOptions and pre-defined values by @adamhathcock in adamhathcock/sharpcompress#1295 * Enforce seekable, readable and writable on streams by @adamhathcock in adamhathcock/sharpcompress#1297 * Add ArchiveInformation record for consolidated archive detection and capability inspection by @Copilot in adamhathcock/sharpcompress#1299 * merge release to master by @adamhathcock in adamhathcock/sharpcompress#1314 * Some clean up and test clean up by @adamhathcock in adamhathcock/sharpcompress#1321 * Finish Write Async by @adamhathcock in adamhathcock/sharpcompress#1323 * More complete Tar implementation: USTAR, PAX, etc. by @adamhathcock in adamhathcock/sharpcompress#1289 * Add Polysharp and adjustments that do not break legacy frameworks by @adamhathcock in adamhathcock/sharpcompress#1330 * Fix null `IVolume.FileName` for single-volume file-based archives by @Copilot in adamhathcock/sharpcompress#1333 * Add skills by @adamhathcock in adamhathcock/sharpcompress#1332 * add AOT smoke and missing tests by @adamhathcock in adamhathcock/sharpcompress#1334 ## New Contributors * @dlemstra made their first contribution in adamhathcock/sharpcompress#1277 * @aromaa made their first contribution in adamhathcock/sharpcompress#1279 * @puk06 made their first contribution in adamhathcock/sharpcompress#1286 **Full Changelog**: adamhathcock/sharpcompress@0.48.1...0.49.0 ## 0.49.0-beta.140 ## What's Changed * Add Polysharp and adjustments that do not break legacy frameworks by @adamhathcock in adamhathcock/sharpcompress#1330 **Full Changelog**: adamhathcock/sharpcompress@0.49.0-beta.136...0.49.0-beta.140 ## 0.49.0-beta.136 ## What's Changed * Rename IWriteableArchiveFactory.cs to IWritableArchiveFactory.cs by @Copilot in adamhathcock/sharpcompress#1244 * Some API clean up from GPT 5.4 by @adamhathcock in adamhathcock/sharpcompress#1243 * Release to master by @adamhathcock in adamhathcock/sharpcompress#1267 * Fix three BLAKE2sp correctness bugs and eliminate allocations in hot path by @coderb in adamhathcock/sharpcompress#1266 * Corrected async examples. by @dlemstra in adamhathcock/sharpcompress#1277 * Fix setting invalid access time fails extraction by @aromaa in adamhathcock/sharpcompress#1279 * Fix incorrect code examples in docs for sync/async usage by @Copilot in adamhathcock/sharpcompress#1280 * Replace APPNOTE.TXT contents with reference link note by @puk06 in adamhathcock/sharpcompress#1286 * Release to Master by @adamhathcock in adamhathcock/sharpcompress#1274 * update docs for tar gap analysis and XZ usage by @adamhathcock in adamhathcock/sharpcompress#1288 * Add a PooledMemoryStream to avoid allocating by @adamhathcock in adamhathcock/sharpcompress#1275 * fix: Change LeaveStreamOpen default from true to false by @puk06 in adamhathcock/sharpcompress#1293 * Fix usage of ReaderOptions and pre-defined values by @adamhathcock in adamhathcock/sharpcompress#1295 * Enforce seekable, readable and writable on streams by @adamhathcock in adamhathcock/sharpcompress#1297 * Add ArchiveInformation record for consolidated archive detection and capability inspection by @Copilot in adamhathcock/sharpcompress#1299 * merge release to master by @adamhathcock in adamhathcock/sharpcompress#1314 * Some clean up and test clean up by @adamhathcock in adamhathcock/sharpcompress#1321 * Finish Write Async by @adamhathcock in adamhathcock/sharpcompress#1323 * More complete Tar implementation: USTAR, PAX, etc. by @adamhathcock in adamhathcock/sharpcompress#1289 ## New Contributors * @dlemstra made their first contribution in adamhathcock/sharpcompress#1277 * @aromaa made their first contribution in adamhathcock/sharpcompress#1279 * @puk06 made their first contribution in adamhathcock/sharpcompress#1286 **Full Changelog**: adamhathcock/sharpcompress@0.48.1...0.49.0-beta1 Commits viewable in [compare view](adamhathcock/sharpcompress@0.48.1...0.49.0). </details> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Updated [SharpCompress](https://github.com/adamhathcock/sharpcompress) from 0.48.1 to 0.49.1. <details> <summary>Release notes</summary> _Sourced from [SharpCompress's releases](https://github.com/adamhathcock/sharpcompress/releases)._ ## 0.49.1 ## What's Changed * Close writable entry streams during async archive disposal by @Copilot in adamhathcock/sharpcompress#1338 * Restore `WriteToDirectoryAsync` progress callbacks for solid 7z archives by @Copilot in adamhathcock/sharpcompress#1340 * Try to fix global.json to avoid churn in locks by @adamhathcock in adamhathcock/sharpcompress#1341 * Fix tar archive enumeration after fully reading entry streams by @adamhathcock in adamhathcock/sharpcompress#1342 **Full Changelog**: adamhathcock/sharpcompress@0.49.0...0.49.1 ## 0.49.0 This should contain a lot of write async fixes and some breaking API changes that fix previous broke `net48` usage ## What's Changed * Rename IWriteableArchiveFactory.cs to IWritableArchiveFactory.cs by @Copilot in adamhathcock/sharpcompress#1244 * Some API clean up from GPT 5.4 by @adamhathcock in adamhathcock/sharpcompress#1243 * Release to master by @adamhathcock in adamhathcock/sharpcompress#1267 * Fix three BLAKE2sp correctness bugs and eliminate allocations in hot path by @coderb in adamhathcock/sharpcompress#1266 * Corrected async examples. by @dlemstra in adamhathcock/sharpcompress#1277 * Fix setting invalid access time fails extraction by @aromaa in adamhathcock/sharpcompress#1279 * Fix incorrect code examples in docs for sync/async usage by @Copilot in adamhathcock/sharpcompress#1280 * Replace APPNOTE.TXT contents with reference link note by @puk06 in adamhathcock/sharpcompress#1286 * Release to Master by @adamhathcock in adamhathcock/sharpcompress#1274 * update docs for tar gap analysis and XZ usage by @adamhathcock in adamhathcock/sharpcompress#1288 * Add a PooledMemoryStream to avoid allocating by @adamhathcock in adamhathcock/sharpcompress#1275 * fix: Change LeaveStreamOpen default from true to false by @puk06 in adamhathcock/sharpcompress#1293 * Fix usage of ReaderOptions and pre-defined values by @adamhathcock in adamhathcock/sharpcompress#1295 * Enforce seekable, readable and writable on streams by @adamhathcock in adamhathcock/sharpcompress#1297 * Add ArchiveInformation record for consolidated archive detection and capability inspection by @Copilot in adamhathcock/sharpcompress#1299 * merge release to master by @adamhathcock in adamhathcock/sharpcompress#1314 * Some clean up and test clean up by @adamhathcock in adamhathcock/sharpcompress#1321 * Finish Write Async by @adamhathcock in adamhathcock/sharpcompress#1323 * More complete Tar implementation: USTAR, PAX, etc. by @adamhathcock in adamhathcock/sharpcompress#1289 * Add Polysharp and adjustments that do not break legacy frameworks by @adamhathcock in adamhathcock/sharpcompress#1330 * Fix null `IVolume.FileName` for single-volume file-based archives by @Copilot in adamhathcock/sharpcompress#1333 * Add skills by @adamhathcock in adamhathcock/sharpcompress#1332 * add AOT smoke and missing tests by @adamhathcock in adamhathcock/sharpcompress#1334 ## New Contributors * @dlemstra made their first contribution in adamhathcock/sharpcompress#1277 * @aromaa made their first contribution in adamhathcock/sharpcompress#1279 * @puk06 made their first contribution in adamhathcock/sharpcompress#1286 **Full Changelog**: adamhathcock/sharpcompress@0.48.1...0.49.0 ## 0.49.0-beta.140 ## What's Changed * Add Polysharp and adjustments that do not break legacy frameworks by @adamhathcock in adamhathcock/sharpcompress#1330 **Full Changelog**: adamhathcock/sharpcompress@0.49.0-beta.136...0.49.0-beta.140 ## 0.49.0-beta.136 ## What's Changed * Rename IWriteableArchiveFactory.cs to IWritableArchiveFactory.cs by @Copilot in adamhathcock/sharpcompress#1244 * Some API clean up from GPT 5.4 by @adamhathcock in adamhathcock/sharpcompress#1243 * Release to master by @adamhathcock in adamhathcock/sharpcompress#1267 * Fix three BLAKE2sp correctness bugs and eliminate allocations in hot path by @coderb in adamhathcock/sharpcompress#1266 * Corrected async examples. by @dlemstra in adamhathcock/sharpcompress#1277 * Fix setting invalid access time fails extraction by @aromaa in adamhathcock/sharpcompress#1279 * Fix incorrect code examples in docs for sync/async usage by @Copilot in adamhathcock/sharpcompress#1280 * Replace APPNOTE.TXT contents with reference link note by @puk06 in adamhathcock/sharpcompress#1286 * Release to Master by @adamhathcock in adamhathcock/sharpcompress#1274 * update docs for tar gap analysis and XZ usage by @adamhathcock in adamhathcock/sharpcompress#1288 * Add a PooledMemoryStream to avoid allocating by @adamhathcock in adamhathcock/sharpcompress#1275 * fix: Change LeaveStreamOpen default from true to false by @puk06 in adamhathcock/sharpcompress#1293 * Fix usage of ReaderOptions and pre-defined values by @adamhathcock in adamhathcock/sharpcompress#1295 * Enforce seekable, readable and writable on streams by @adamhathcock in adamhathcock/sharpcompress#1297 * Add ArchiveInformation record for consolidated archive detection and capability inspection by @Copilot in adamhathcock/sharpcompress#1299 * merge release to master by @adamhathcock in adamhathcock/sharpcompress#1314 * Some clean up and test clean up by @adamhathcock in adamhathcock/sharpcompress#1321 * Finish Write Async by @adamhathcock in adamhathcock/sharpcompress#1323 * More complete Tar implementation: USTAR, PAX, etc. by @adamhathcock in adamhathcock/sharpcompress#1289 ## New Contributors * @dlemstra made their first contribution in adamhathcock/sharpcompress#1277 * @aromaa made their first contribution in adamhathcock/sharpcompress#1279 * @puk06 made their first contribution in adamhathcock/sharpcompress#1286 **Full Changelog**: adamhathcock/sharpcompress@0.48.1...0.49.0-beta1 Commits viewable in [compare view](adamhathcock/sharpcompress@0.48.1...0.49.1). </details> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Fix off-by-one in Update(BLAKE2SP): pos was masked with 448 (64×7) instead of 511 (64×8−1), causing incorrect leaf assignment when update chunks are not multiples of 64 bytes. This produced wrong hashes whenever streaming reads didn't align to 64-byte boundaries.
Fix double-finalization when Read() is called again after returning 0. Final() was called unconditionally on each EOF read, re-running compression on an already-finalized state and corrupting the hash. EnsureHash() guards with a null-check and is idempotent; both sync and async Read paths share the fix. _blake2sp is set to null after finalization so any erroneous post-final calls fail fast rather than silently corrupting state.
Fix false-positive CRC check when stream is not fully drained. _hash was initialized to fileHeader.FileCrc in the constructor, so GetCrc() returned the expected CRC rather than the computed one if the stream was abandoned early. The check would then compare the expected hash against itself and always succeed, silently accepting a corrupt or incomplete file. _hash is now null until the stream is fully read; GetCrc() throws if called early rather than returning a misleading value.
Additional changes: