From 1d5e9705db5933f5d89dc53d9312d6db5d3c423c Mon Sep 17 00:00:00 2001 From: Alex Murkoff <413x1nkp@gmail.com> Date: Sat, 13 Apr 2024 02:24:14 +0700 Subject: [PATCH 1/7] fixed memory leaks and almost all undefined behaviour --- doc/educational_decoder/harness.c | 1 + lib/compress/zstd_compress.c | 2 +- lib/decompress/zstd_decompress.c | 2 +- programs/benchfn.c | 2 +- tests/bigdict.c | 11 ++++++++--- tests/paramgrill.c | 1 - tests/regression/result.c | 2 ++ tests/seqgen.c | 2 +- zlibWrapper/examples/minigzip.c | 4 ++-- zlibWrapper/gzwrite.c | 2 ++ 10 files changed, 19 insertions(+), 10 deletions(-) diff --git a/doc/educational_decoder/harness.c b/doc/educational_decoder/harness.c index 12c5a801b..eb79ceacd 100644 --- a/doc/educational_decoder/harness.c +++ b/doc/educational_decoder/harness.c @@ -50,6 +50,7 @@ static buffer_s read_file(const char *path) fclose(f); buffer_s const b = { ptr, size }; + free(ptr); return b; } diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index 9284e2a48..d17182a46 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -2764,7 +2764,7 @@ ZSTD_buildSequencesStatistics( const BYTE* const ofCodeTable = seqStorePtr->ofCode; const BYTE* const llCodeTable = seqStorePtr->llCode; const BYTE* const mlCodeTable = seqStorePtr->mlCode; - ZSTD_symbolEncodingTypeStats_t stats; + ZSTD_symbolEncodingTypeStats_t stats = {}; stats.lastCountSize = 0; /* convert length/distances into codes */ diff --git a/lib/decompress/zstd_decompress.c b/lib/decompress/zstd_decompress.c index 2f03cf7b0..658cb2818 100644 --- a/lib/decompress/zstd_decompress.c +++ b/lib/decompress/zstd_decompress.c @@ -723,7 +723,7 @@ static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx* dctx, const void* src, size_t he static ZSTD_frameSizeInfo ZSTD_errorFrameSizeInfo(size_t ret) { - ZSTD_frameSizeInfo frameSizeInfo; + ZSTD_frameSizeInfo frameSizeInfo = {}; frameSizeInfo.compressedSize = ret; frameSizeInfo.decompressedBound = ZSTD_CONTENTSIZE_ERROR; return frameSizeInfo; diff --git a/programs/benchfn.c b/programs/benchfn.c index 3e042cf38..74cd21b20 100644 --- a/programs/benchfn.c +++ b/programs/benchfn.c @@ -91,7 +91,7 @@ static BMK_runOutcome_t BMK_runOutcome_error(size_t errorResult) static BMK_runOutcome_t BMK_setValid_runTime(BMK_runTime_t runTime) { - BMK_runOutcome_t outcome; + BMK_runOutcome_t outcome = {}; outcome.error_tag_never_ever_use_directly = 0; outcome.internal_never_ever_use_directly = runTime; return outcome; diff --git a/tests/bigdict.c b/tests/bigdict.c index ff2bb2d70..748b60e79 100644 --- a/tests/bigdict.c +++ b/tests/bigdict.c @@ -70,12 +70,14 @@ int main(int argc, const char** argv) char* buffer = (char*)malloc(bufferSize); void* out = malloc(outSize); void* roundtrip = malloc(dataSize); + int _exit_code = 0; (void)argc; (void)argv; if (!buffer || !out || !roundtrip || !cctx || !dctx) { fprintf(stderr, "Allocation failure\n"); - return 1; + _exit_code = 1; + goto cleanup; } if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_windowLog, 31))) @@ -119,10 +121,13 @@ int main(int argc, const char** argv) fprintf(stderr, "Success!\n"); + goto cleanup; + +cleanup: free(roundtrip); free(out); free(buffer); - ZSTD_freeDCtx(dctx); ZSTD_freeCCtx(cctx); - return 0; + ZSTD_freeDCtx(dctx); + return _exit_code; } diff --git a/tests/paramgrill.c b/tests/paramgrill.c index 8971c65d6..869e966e0 100644 --- a/tests/paramgrill.c +++ b/tests/paramgrill.c @@ -1273,7 +1273,6 @@ static int createBuffers(buffers_t* buff, const char* const * const fileNamesTab f = fopen(fileNamesTable[n], "rb"); if (f==NULL) { DISPLAY("impossible to open file %s\n", fileNamesTable[n]); - fclose(f); ret = 10; goto _cleanUp; } diff --git a/tests/regression/result.c b/tests/regression/result.c index 8ccb8751e..84a8a044d 100644 --- a/tests/regression/result.c +++ b/tests/regression/result.c @@ -24,5 +24,7 @@ char const* result_get_error_string(result_t result) { return "decompression error"; case result_error_round_trip_error: return "round trip error"; + default: + return "unknown error - " + result_get_error(result); } } diff --git a/tests/seqgen.c b/tests/seqgen.c index 0d8a766c8..efd528baa 100644 --- a/tests/seqgen.c +++ b/tests/seqgen.c @@ -31,7 +31,7 @@ static BYTE SEQ_randByte(unsigned* src) SEQ_stream SEQ_initStream(unsigned seed) { - SEQ_stream stream; + SEQ_stream stream = {}; stream.state = 0; XXH64_reset(&stream.xxh, 0); stream.seed = seed; diff --git a/zlibWrapper/examples/minigzip.c b/zlibWrapper/examples/minigzip.c index 1af815207..a06554212 100644 --- a/zlibWrapper/examples/minigzip.c +++ b/zlibWrapper/examples/minigzip.c @@ -234,7 +234,7 @@ int gzwrite _Z_OF((gzFile, const void *, unsigned)); int gzwrite(gzFile gz, const void *buf, unsigned len) { z_stream *strm; - unsigned char out[BUFLEN]; + unsigned char out[BUFLEN] = 0; if (gz == NULL || !gz->write) return 0; @@ -287,7 +287,7 @@ int gzclose _Z_OF((gzFile)); int gzclose(gzFile gz) { z_stream *strm; - unsigned char out[BUFLEN]; + unsigned char out[BUFLEN] = 0; if (gz == NULL) return Z_STREAM_ERROR; diff --git a/zlibWrapper/gzwrite.c b/zlibWrapper/gzwrite.c index 67f5eda6c..0a89c8d75 100644 --- a/zlibWrapper/gzwrite.c +++ b/zlibWrapper/gzwrite.c @@ -64,6 +64,8 @@ local int gz_init(gz_statep state) { strm->next_out = state.state->out; state.state->x.next = strm->next_out; } + + free(state.state); return 0; } From 4f41631aa4fffffac511d484ad10d603650e0156 Mon Sep 17 00:00:00 2001 From: Alex Murkoff <413x1nkp@gmail.com> Date: Sat, 13 Apr 2024 02:35:32 +0700 Subject: [PATCH 2/7] fixed ISO C incompatibility --- lib/compress/zstd_compress.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index d17182a46..9284e2a48 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -2764,7 +2764,7 @@ ZSTD_buildSequencesStatistics( const BYTE* const ofCodeTable = seqStorePtr->ofCode; const BYTE* const llCodeTable = seqStorePtr->llCode; const BYTE* const mlCodeTable = seqStorePtr->mlCode; - ZSTD_symbolEncodingTypeStats_t stats = {}; + ZSTD_symbolEncodingTypeStats_t stats; stats.lastCountSize = 0; /* convert length/distances into codes */ From 01cea2e1e2cf1cafa4b61e1bc8eb85618cf18c76 Mon Sep 17 00:00:00 2001 From: Alex Murkoff <413x1nkp@gmail.com> Date: Sat, 13 Apr 2024 02:37:13 +0700 Subject: [PATCH 3/7] fixed ISO C incompatibility for good this time... probably --- lib/decompress/zstd_decompress.c | 2 +- programs/benchfn.c | 2 +- tests/seqgen.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/decompress/zstd_decompress.c b/lib/decompress/zstd_decompress.c index 658cb2818..2f03cf7b0 100644 --- a/lib/decompress/zstd_decompress.c +++ b/lib/decompress/zstd_decompress.c @@ -723,7 +723,7 @@ static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx* dctx, const void* src, size_t he static ZSTD_frameSizeInfo ZSTD_errorFrameSizeInfo(size_t ret) { - ZSTD_frameSizeInfo frameSizeInfo = {}; + ZSTD_frameSizeInfo frameSizeInfo; frameSizeInfo.compressedSize = ret; frameSizeInfo.decompressedBound = ZSTD_CONTENTSIZE_ERROR; return frameSizeInfo; diff --git a/programs/benchfn.c b/programs/benchfn.c index 74cd21b20..3e042cf38 100644 --- a/programs/benchfn.c +++ b/programs/benchfn.c @@ -91,7 +91,7 @@ static BMK_runOutcome_t BMK_runOutcome_error(size_t errorResult) static BMK_runOutcome_t BMK_setValid_runTime(BMK_runTime_t runTime) { - BMK_runOutcome_t outcome = {}; + BMK_runOutcome_t outcome; outcome.error_tag_never_ever_use_directly = 0; outcome.internal_never_ever_use_directly = runTime; return outcome; diff --git a/tests/seqgen.c b/tests/seqgen.c index efd528baa..0d8a766c8 100644 --- a/tests/seqgen.c +++ b/tests/seqgen.c @@ -31,7 +31,7 @@ static BYTE SEQ_randByte(unsigned* src) SEQ_stream SEQ_initStream(unsigned seed) { - SEQ_stream stream = {}; + SEQ_stream stream; stream.state = 0; XXH64_reset(&stream.xxh, 0); stream.seed = seed; From 75d0f66c879451e20f62f07162a38af2b314262a Mon Sep 17 00:00:00 2001 From: Alex Murkoff <413x1nkp@gmail.com> Date: Sat, 13 Apr 2024 12:51:20 +0700 Subject: [PATCH 4/7] reverted the addition of free at the gz_init() --- zlibWrapper/gzwrite.c | 1 - 1 file changed, 1 deletion(-) diff --git a/zlibWrapper/gzwrite.c b/zlibWrapper/gzwrite.c index 0a89c8d75..85b776a94 100644 --- a/zlibWrapper/gzwrite.c +++ b/zlibWrapper/gzwrite.c @@ -65,7 +65,6 @@ local int gz_init(gz_statep state) { state.state->x.next = strm->next_out; } - free(state.state); return 0; } From b4ecf724b15f0ab21a996339112680d3f4ba33eb Mon Sep 17 00:00:00 2001 From: Alex Murkoff <413x1nkp@gmail.com> Date: Sun, 14 Apr 2024 17:45:53 +0700 Subject: [PATCH 5/7] made initialize out char array with all elements set to 0 fixed where i made it to init with just the first one being set to 0 --- zlibWrapper/examples/minigzip.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zlibWrapper/examples/minigzip.c b/zlibWrapper/examples/minigzip.c index a06554212..c4ce5f479 100644 --- a/zlibWrapper/examples/minigzip.c +++ b/zlibWrapper/examples/minigzip.c @@ -234,7 +234,7 @@ int gzwrite _Z_OF((gzFile, const void *, unsigned)); int gzwrite(gzFile gz, const void *buf, unsigned len) { z_stream *strm; - unsigned char out[BUFLEN] = 0; + unsigned char out[BUFLEN] = { 0 }; if (gz == NULL || !gz->write) return 0; From 0b24fc0a113c92c5ba5ec78f7169a2ddfe0d700f Mon Sep 17 00:00:00 2001 From: Alex Murkoff <413x1nkp@gmail.com> Date: Sun, 14 Apr 2024 17:57:53 +0700 Subject: [PATCH 6/7] init out char array with all members as 0 x2 --- zlibWrapper/examples/minigzip.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zlibWrapper/examples/minigzip.c b/zlibWrapper/examples/minigzip.c index c4ce5f479..ef48d74d2 100644 --- a/zlibWrapper/examples/minigzip.c +++ b/zlibWrapper/examples/minigzip.c @@ -287,7 +287,7 @@ int gzclose _Z_OF((gzFile)); int gzclose(gzFile gz) { z_stream *strm; - unsigned char out[BUFLEN] = 0; + unsigned char out[BUFLEN] = { 0 }; if (gz == NULL) return Z_STREAM_ERROR; From 849b2ad907070c6a46cc4679f4f831eaebacc715 Mon Sep 17 00:00:00 2001 From: Alex Murkoff <413x1nkp@gmail.com> Date: Sun, 14 Apr 2024 20:44:12 +0700 Subject: [PATCH 7/7] removed freeing of the ptr --- doc/educational_decoder/harness.c | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/educational_decoder/harness.c b/doc/educational_decoder/harness.c index eb79ceacd..12c5a801b 100644 --- a/doc/educational_decoder/harness.c +++ b/doc/educational_decoder/harness.c @@ -50,7 +50,6 @@ static buffer_s read_file(const char *path) fclose(f); buffer_s const b = { ptr, size }; - free(ptr); return b; }