fix: address re-review — coverage build, chunk OOB guard, UBSan loads, srand scope
CI / lint (push) Successful in 8s
CI / lint (pull_request) Successful in 7s
CI / sanitizers (address) (push) Successful in 14s
CI / sanitizers (undefined) (push) Successful in 14s
CI / fuzz-build (push) Successful in 13s
CI / coverage (push) Successful in 10s
CI / build-and-test (push) Successful in 55s
CI / valgrind (push) Successful in 11s
CI / sanitizers (address) (pull_request) Successful in 15s
CI / sanitizers (undefined) (pull_request) Successful in 16s
CI / fuzz-build (pull_request) Successful in 12s
CI / build-and-test (pull_request) Successful in 55s
CI / coverage (pull_request) Successful in 9s
CI / valgrind (pull_request) Successful in 13s

- Remove -DSTRICT_WARNINGS=ON from coverage job (_FORTIFY_SOURCE + -O0 + -Werror fatal)
- Fix chunk.c metadata guard: peek at present flag before calling metadata_from_buf
  so the remaining_size check covers the full sizeof(int)+FILE_METADATA_WIRE_SIZE
- Fix chunk.c UBSan misaligned loads: use memcpy instead of *(size_t*)deref
- Move srand(42) to test_property() top level so all property tests are seeded
This commit is contained in:
2026-07-20 14:27:20 +02:00
parent ed6242cfc5
commit 3f73012b36
3 changed files with 17 additions and 15 deletions
+13 -11
View File
@@ -95,7 +95,8 @@ Chunk* chunk_deserialize(Data* data, bool use_metadata) {
return NULL;
}
size_t path_len = *(size_t*)data_pointer;
size_t path_len;
memcpy(&path_len, data_pointer, sizeof(size_t));
data_pointer += sizeof(size_t);
remaining_size -= sizeof(size_t);
@@ -125,18 +126,18 @@ Chunk* chunk_deserialize(Data* data, bool use_metadata) {
array_list_delete(files);
return NULL;
}
// Peek at present flag to determine total size needed before reading
int present_flag;
memcpy(&present_flag, data_pointer, sizeof(int));
if (present_flag && remaining_size < sizeof(int) + FILE_METADATA_WIRE_SIZE) {
log_message(LOG_LEVEL_ERROR, "Invalid chunk format: not enough data for metadata body");
array_list_delete(files);
return NULL;
}
file->metadata = metadata_from_buf(&data_pointer);
remaining_size -= sizeof(int);
if (file->metadata) {
if (remaining_size < FILE_METADATA_WIRE_SIZE) {
log_message(LOG_LEVEL_ERROR, "Invalid chunk format: not enough data for metadata body");
free(file->metadata);
file->metadata = NULL;
array_list_delete(files);
return NULL;
}
if (file->metadata)
remaining_size -= FILE_METADATA_WIRE_SIZE;
}
}
if (remaining_size < sizeof(size_t)) {
@@ -145,7 +146,8 @@ Chunk* chunk_deserialize(Data* data, bool use_metadata) {
return NULL;
}
size_t file_data_size = *(size_t*)data_pointer;
size_t file_data_size;
memcpy(&file_data_size, data_pointer, sizeof(size_t));
data_pointer += sizeof(size_t);
remaining_size -= sizeof(size_t);