Remove possible NULL pointer addition

Refactor `ZSTDMT_isOverlapped()` to do NULL checks before computing the
end pointer.

Fixes #2906.
dev
Nick Terrell 2021-12-08 10:57:30 -08:00
parent 38dfc4699e
commit b94407b6cf
1 changed files with 10 additions and 6 deletions

View File

@ -1550,18 +1550,22 @@ static range_t ZSTDMT_getInputDataInUse(ZSTDMT_CCtx* mtctx)
static int ZSTDMT_isOverlapped(buffer_t buffer, range_t range) static int ZSTDMT_isOverlapped(buffer_t buffer, range_t range)
{ {
BYTE const* const bufferStart = (BYTE const*)buffer.start; BYTE const* const bufferStart = (BYTE const*)buffer.start;
BYTE const* const bufferEnd = bufferStart + buffer.capacity;
BYTE const* const rangeStart = (BYTE const*)range.start; BYTE const* const rangeStart = (BYTE const*)range.start;
BYTE const* const rangeEnd = range.size != 0 ? rangeStart + range.size : rangeStart;
if (rangeStart == NULL || bufferStart == NULL) if (rangeStart == NULL || bufferStart == NULL)
return 0; return 0;
{
BYTE const* const bufferEnd = bufferStart + buffer.capacity;
BYTE const* const rangeEnd = rangeStart + range.size;
/* Empty ranges cannot overlap */ /* Empty ranges cannot overlap */
if (bufferStart == bufferEnd || rangeStart == rangeEnd) if (bufferStart == bufferEnd || rangeStart == rangeEnd)
return 0; return 0;
return bufferStart < rangeEnd && rangeStart < bufferEnd; return bufferStart < rangeEnd && rangeStart < bufferEnd;
} }
}
static int ZSTDMT_doesOverlapWindow(buffer_t buffer, ZSTD_window_t window) static int ZSTDMT_doesOverlapWindow(buffer_t buffer, ZSTD_window_t window)
{ {