Stop suppressing pointer-overflow UBSAN errors
* Remove all pointer-overflow suppressions from our UBSAN builds/tests.
* Add `ZSTD_ALLOW_POINTER_OVERFLOW_ATTR` macro to suppress
pointer-overflow at a per-function level. This is a superior approach
because it also applies to users who build zstd with UBSAN.
* Add `ZSTD_wrappedPtr{Diff,Add,Sub}()` that use these suppressions.
The end goal is to only tag these functions with
`ZSTD_ALLOW_POINTER_OVERFLOW`. But we can start by annoting functions
that rely on pointer overflow, and gradually transition to using
these.
* Add `ZSTD_maybeNullPtrAdd()` to simplify pointer addition when the
pointer may be `NULL`.
* Fix all the fuzzer issues that came up. I'm sure there will be a lot
more, but these are the ones that came up within a few minutes of
running the fuzzers, and while running GitHub CI.
This commit is contained in:
committed by
Nick Terrell
parent
3daed7017a
commit
43118da8a7
+3
-1
@@ -328,7 +328,7 @@ static void FUZ_decodeSequences(BYTE* dst, ZSTD_Sequence* seqs, size_t seqsSize,
|
||||
|
||||
if (seqs[i].offset != 0) {
|
||||
for (j = 0; j < seqs[i].matchLength; ++j)
|
||||
dst[j] = dst[j - seqs[i].offset];
|
||||
dst[j] = dst[(ptrdiff_t)(j - seqs[i].offset)];
|
||||
dst += seqs[i].matchLength;
|
||||
src += seqs[i].matchLength;
|
||||
size -= seqs[i].matchLength;
|
||||
@@ -3684,11 +3684,13 @@ static int basicUnitTests(U32 const seed, double compressibility)
|
||||
|
||||
/* Test with block delimiters roundtrip */
|
||||
seqsSize = ZSTD_generateSequences(cctx, seqs, srcSize, src, srcSize);
|
||||
CHECK_Z(seqsSize);
|
||||
FUZ_decodeSequences(decoded, seqs, seqsSize, src, srcSize, ZSTD_sf_explicitBlockDelimiters);
|
||||
assert(!memcmp(CNBuffer, compressedBuffer, srcSize));
|
||||
|
||||
/* Test no block delimiters roundtrip */
|
||||
seqsSize = ZSTD_mergeBlockDelimiters(seqs, seqsSize);
|
||||
CHECK_Z(seqsSize);
|
||||
FUZ_decodeSequences(decoded, seqs, seqsSize, src, srcSize, ZSTD_sf_noBlockDelimiters);
|
||||
assert(!memcmp(CNBuffer, compressedBuffer, srcSize));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user