1
0
mirror of https://github.com/facebook/zstd.git synced 2025-03-06 00:43:59 +02:00

Merge pull request #3824 from elasota/specify-zero-offset

Specify offset 0 as invalid and specify required fixup behavior
This commit is contained in:
Yann Collet 2024-03-08 15:25:48 -08:00 committed by GitHub
commit e127139ceb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 1 deletions

View File

@ -0,0 +1,14 @@
Decompressor Accepted Invalid Data
==================================
This document describes the behavior of the reference decompressor in cases
where it accepts an invalid frame instead of reporting an error.
Zero offsets converted to 1
---------------------------
If a sequence is decoded with `literals_length = 0` and `offset_value = 3`
while `Repeated_Offset_1 = 1`, the computed offset will be `0`, which is
invalid.
The reference decompressor will process this case as if the computed
offset was `1`, including inserting `1` into the repeated offset list.

View File

@ -929,7 +929,10 @@ There is an exception though, when current sequence's `literals_length = 0`.
In this case, repeated offsets are shifted by one,
so an `offset_value` of 1 means `Repeated_Offset2`,
an `offset_value` of 2 means `Repeated_Offset3`,
and an `offset_value` of 3 means `Repeated_Offset1 - 1_byte`.
and an `offset_value` of 3 means `Repeated_Offset1 - 1`.
In the final case, if `Repeated_Offset1 - 1` evaluates to 0, then the
data is considered corrupted.
For the first block, the starting offset history is populated with following values :
`Repeated_Offset1`=1, `Repeated_Offset2`=4, `Repeated_Offset3`=8,