Skip to content

Commit 8e3eb92

Browse files
committed
zstd: Fix ignored crc
When `IgnoreChecksum(true)` was used, single threaded decodes would not consume CRC. Bonus: Remove crc build tag for fuzzing.
1 parent f31f904 commit 8e3eb92

File tree

4 files changed

+13
-31
lines changed

4 files changed

+13
-31
lines changed

zstd/decoder.go

+12-8
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ func (d *Decoder) nextBlock(blocking bool) (ok bool) {
451451
got := d.current.crc.Sum64()
452452
var tmp [4]byte
453453
binary.LittleEndian.PutUint32(tmp[:], uint32(got))
454-
if !d.o.ignoreChecksum && !bytes.Equal(tmp[:], next.d.checkCRC) && !ignoreCRC {
454+
if !d.o.ignoreChecksum && !bytes.Equal(tmp[:], next.d.checkCRC) {
455455
if debugDecoder {
456456
println("CRC Check Failed:", tmp[:], " (got) !=", next.d.checkCRC, "(on stream)")
457457
}
@@ -534,13 +534,17 @@ func (d *Decoder) nextBlockSync() (ok bool) {
534534
}
535535

536536
// Update/Check CRC
537-
if !d.o.ignoreChecksum && d.frame.HasCheckSum {
538-
d.frame.crc.Write(d.current.b)
539-
if d.current.d.Last {
540-
d.current.err = d.frame.checkCRC()
541-
if d.current.err != nil {
542-
println("CRC error:", d.current.err)
543-
return false
537+
if d.frame.HasCheckSum {
538+
if !d.o.ignoreChecksum {
539+
d.frame.consumeCRC()
540+
} else {
541+
d.frame.crc.Write(d.current.b)
542+
if d.current.d.Last {
543+
d.current.err = d.frame.checkCRC()
544+
if d.current.err != nil {
545+
println("CRC error:", d.current.err)
546+
return false
547+
}
544548
}
545549
}
546550
}

zstd/framedec.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ func (d *frameDec) checkCRC() error {
310310
tmp[2] = byte(got >> 16)
311311
tmp[3] = byte(got >> 24)
312312

313-
if !bytes.Equal(tmp[:], want) && !ignoreCRC {
313+
if !bytes.Equal(tmp[:], want) {
314314
if debugDecoder {
315315
println("CRC Check Failed:", tmp[:], "!=", want)
316316
}

zstd/fuzz.go

-11
This file was deleted.

zstd/fuzz_none.go

-11
This file was deleted.

0 commit comments

Comments
 (0)