From efa4a06e566dd09199fcdeaeae9f9c72e79b388b Mon Sep 17 00:00:00 2001 From: simon987 Date: Fri, 11 Jun 2021 20:19:36 -0400 Subject: [PATCH] Fix meta_key UB problem --- src/io/serialize.c | 12 ++++++------ tests/test_scan.py | 18 ++++++++++-------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/io/serialize.c b/src/io/serialize.c index a7981b7..a6c8413 100644 --- a/src/io/serialize.c +++ b/src/io/serialize.c @@ -18,7 +18,7 @@ typedef struct { #define META_NEXT 0xFFFF void skip_meta(FILE *file) { - enum metakey key; + enum metakey key = 0; fread(&key, sizeof(uint16_t), 1, file); while (key != META_NEXT) { @@ -237,7 +237,7 @@ void read_index_bin(const char *path, const char *index_id, index_func func) { FILE *file = fopen(path, "rb"); while (TRUE) { buf.cur = 0; - size_t _ = fread((void *) &line, 1, sizeof(line_t), file); + size_t _ = fread((void *) &line, sizeof(line_t), 1, file); if (feof(file)) { break; } @@ -284,8 +284,8 @@ void read_index_bin(const char *path, const char *index_id, index_func func) { cJSON_AddStringToObject(document, "path", ""); } - enum metakey key; - fread(&key, sizeof(short), 1, file); + enum metakey key = 0; + fread(&key, sizeof(uint16_t), 1, file); size_t ret; while (key != META_NEXT) { switch (key) { @@ -481,7 +481,7 @@ void incremental_read(GHashTable *table, const char *filepath) { incremental_put(table, line.path_md5, line.mtime); - while ((getc(file))) {} + while ((getc(file)) != 0) {} skip_meta(file); } fclose(file); @@ -531,7 +531,7 @@ void incremental_copy(store_t *store, store_t *dst_store, const char *filepath, free(buf); } - enum metakey key; + enum metakey key = 0; while (1) { fread(&key, sizeof(uint16_t), 1, file); fwrite(&key, sizeof(uint16_t), 1, dst_file); diff --git a/tests/test_scan.py b/tests/test_scan.py index 3ea8bd0..6fe4225 100644 --- a/tests/test_scan.py +++ b/tests/test_scan.py @@ -17,17 +17,19 @@ def copy_files(files): def sist2(*args): + print("./sist2 " + " ".join(args)) + return subprocess.check_output( - args=["./sist2_debug", *args], + args=["./sist2", *args], ) def sist2_index(files, *args): path = copy_files(files) - shutil.rmtree("i", ignore_errors=True) - sist2("scan", path, "-o", "i", *args) - return iter(sist2_index_to_dict("i")) + shutil.rmtree("test_i", ignore_errors=True) + sist2("scan", path, "-o", "test_i", *args) + return iter(sist2_index_to_dict("test_i")) def sist2_incremental_index(files, func=None, *args): @@ -36,14 +38,14 @@ def sist2_incremental_index(files, func=None, *args): if func: func(path) - shutil.rmtree("i_inc", ignore_errors=True) - sist2("scan", path, "-o", "i_inc", "--incremental", "i", *args) - return iter(sist2_index_to_dict("i_inc")) + shutil.rmtree("test_i_inc", ignore_errors=True) + sist2("scan", path, "-o", "test_i_inc", "--incremental", "test_i", *args) + return iter(sist2_index_to_dict("test_i_inc")) def sist2_index_to_dict(index): res = subprocess.check_output( - args=["./sist2_debug", "index", "--print", index], + args=["./sist2", "index", "--print", index], ) for line in res.splitlines():