diff --git a/contrib/seekable_format/tests/Makefile b/contrib/seekable_format/tests/Makefile index b00657f8..707d04d5 100644 --- a/contrib/seekable_format/tests/Makefile +++ b/contrib/seekable_format/tests/Makefile @@ -16,7 +16,8 @@ ZSTDLIB = $(ZSTDLIB_PATH)/$(ZSTDLIB_NAME) CPPFLAGS += -I../ -I$(ZSTDLIB_PATH) -I$(ZSTDLIB_PATH)/common CFLAGS ?= -O3 -CFLAGS += -g +CFLAGS += -g -Wall -Wextra -Wcast-qual -Wcast-align -Wconversion \ + -Wformat=2 -Wstrict-aliasing=1 SEEKABLE_OBJS = ../zstdseek_compress.c ../zstdseek_decompress.c $(ZSTDLIB) @@ -33,6 +34,6 @@ $(ZSTDLIB): seekable_tests : seekable_tests.c $(SEEKABLE_OBJS) clean: - @rm -f core *.o tmp* result* *.zst \ + @$(RM) core *.o tmp* result* *.zst \ seekable_tests @echo Cleaning completed diff --git a/contrib/seekable_format/tests/seekable_tests.c b/contrib/seekable_format/tests/seekable_tests.c index f2556b51..e9911c08 100644 --- a/contrib/seekable_format/tests/seekable_tests.c +++ b/contrib/seekable_format/tests/seekable_tests.c @@ -8,6 +8,7 @@ int main(int argc, const char** argv) { unsigned testNb = 1; + (void)argc; (void)argv; printf("Beginning zstd seekable format tests...\n"); printf("Test %u - check that seekable decompress does not hang: ", testNb++); { /* Github issue #2335 */ diff --git a/contrib/seekable_format/zstd_seekable.h b/contrib/seekable_format/zstd_seekable.h index bf0118a3..b7e2d82d 100644 --- a/contrib/seekable_format/zstd_seekable.h +++ b/contrib/seekable_format/zstd_seekable.h @@ -173,7 +173,7 @@ ZSTDLIB_API unsigned ZSTD_seekable_offsetToFrameIndex(const ZSTD_seekable* zs, u /*===== Independent seek table management =====*/ -ZSTDLIB_API size_t ZSTD_seekable_copySeekTable(ZSTD_seekable* zs, ZSTD_seekTable** out); +ZSTDLIB_API ZSTD_seekTable* ZSTD_seekTable_create_fromSeekable(const ZSTD_seekable* zs); ZSTDLIB_API size_t ZSTD_seekTable_free(ZSTD_seekTable* st); /*===== Direct seek table access functions =====*/ diff --git a/contrib/seekable_format/zstdseek_decompress.c b/contrib/seekable_format/zstdseek_decompress.c index 5315e6c3..cf9e3dad 100644 --- a/contrib/seekable_format/zstdseek_decompress.c +++ b/contrib/seekable_format/zstdseek_decompress.c @@ -118,15 +118,16 @@ static int ZSTD_seekable_seek_buff(void* opaque, long long offset, int origin) { buffWrapper_t* const buff = (buffWrapper_t*) opaque; unsigned long long newOffset; + assert(offset >= 0); switch (origin) { case SEEK_SET: - newOffset = offset; + newOffset = (unsigned long long)offset; break; case SEEK_CUR: - newOffset = (unsigned long long)buff->pos + offset; + newOffset = (unsigned long long)buff->pos + (unsigned long long)offset; break; case SEEK_END: - newOffset = (unsigned long long)buff->size + offset; + newOffset = (unsigned long long)buff->size + (unsigned long long)offset; break; default: assert(0); /* not possible */ @@ -198,10 +199,10 @@ size_t ZSTD_seekable_free(ZSTD_seekable* zs) return 0; } -size_t ZSTD_seekable_copySeekTable(ZSTD_seekable* zs, ZSTD_seekTable** out) +ZSTD_seekTable* ZSTD_seekTable_create_fromSeekable(const ZSTD_seekable* zs) { ZSTD_seekTable* const st = malloc(sizeof(ZSTD_seekTable)); - if (st==NULL) return ERROR(memory_allocation); + if (st==NULL) return NULL; st->checksumFlag = zs->seekTable.checksumFlag; st->tableLen = zs->seekTable.tableLen; @@ -211,14 +212,12 @@ size_t ZSTD_seekable_copySeekTable(ZSTD_seekable* zs, ZSTD_seekTable** out) seekEntry_t* const entries = (seekEntry_t*)malloc(entriesSize); if (entries==NULL) { free(st); - return ERROR(memory_allocation); + return NULL; } memcpy(entries, zs->seekTable.entries, entriesSize); st->entries = entries; - - *out = st; - return 0; + return st; } size_t ZSTD_seekTable_free(ZSTD_seekTable* st) @@ -449,8 +448,9 @@ size_t ZSTD_seekable_decompress(ZSTD_seekable* zs, void* dst, size_t len, unsign zs->decompressedOffset = zs->seekTable.entries[targetFrame].dOffset; zs->curFrame = targetFrame; + assert(zs->seekTable.entries[targetFrame].cOffset < LLONG_MAX); CHECK_IO(zs->src.seek(zs->src.opaque, - zs->seekTable.entries[targetFrame].cOffset, + (long long)zs->seekTable.entries[targetFrame].cOffset, SEEK_SET)); zs->in = (ZSTD_inBuffer){zs->inBuff, 0, 0}; XXH64_reset(&zs->xxhState, 0); diff --git a/lib/common/mem.h b/lib/common/mem.h index 9813bfc4..961f8984 100644 --- a/lib/common/mem.h +++ b/lib/common/mem.h @@ -308,7 +308,7 @@ MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val) MEM_STATIC U32 MEM_readLE24(const void* memPtr) { - return MEM_readLE16(memPtr) + (((const BYTE*)memPtr)[2] << 16); + return (U32)MEM_readLE16(memPtr) + ((U32)(((const BYTE*)memPtr)[2]) << 16); } MEM_STATIC void MEM_writeLE24(void* memPtr, U32 val)