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] 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; }