diff --git a/test/fuzz/fuzz_round_trip.c b/test/fuzz/fuzz_round_trip.c index 4ee9bd813633249e30bc36def546e4a963455dd6..d87cb8112d8561e73bbe7c5c099ab9e9259ae4bb 100644 --- a/test/fuzz/fuzz_round_trip.c +++ b/test/fuzz/fuzz_round_trip.c @@ -89,8 +89,11 @@ static uint32_t chunk_round_trip(void *data, uint32_t data_size, if (use_decmp_buf) decmp_data = TEST_malloc(data_size); - if (use_decmp_up_model) + if (use_decmp_up_model) { up_model_decmp = TEST_malloc(data_size); + if (!model_mode_is_used(cmp_par->cmp_mode)) + memset(up_model_decmp, 0, data_size); /* up_model is not used */ + } decmp_size = decompress_cmp_entiy((struct cmp_entity *)cmp_data, model_cpy, up_model_decmp, decmp_data); @@ -144,9 +147,18 @@ int LLVMFuzzerTestOneInput(const uint8_t *src, size_t size) } FUZZ_ASSERT(size <= UINT32_MAX); - /* 1/2 of the cases we use a updated model buffer */ + /* generate compression parameters */ + FUZZ_dataProducer_cmp_par(producer, &cmp_par); + cmp_par.lossy_par = 0; /*TODO: implement lossy */ if (FUZZ_dataProducer_uint32Range(producer, 0, 1)) + cmp_par_ptr = &cmp_par; + + /* 1/2 of the cases we use a updated model buffer */ + if (FUZZ_dataProducer_uint32Range(producer, 0, 1)) { up_model = FUZZ_malloc(size); + if (!model_mode_is_used(cmp_par.cmp_mode)) + memset(up_model, 0, size); /* up_model is not used */ + } cmp_size_bound = compress_chunk_cmp_size_bound(src, size); if (cmp_is_error(cmp_size_bound)) @@ -154,12 +166,6 @@ int LLVMFuzzerTestOneInput(const uint8_t *src, size_t size) cmp_data_capacity = FUZZ_dataProducer_uint32Range(producer, 0, cmp_size_bound+(uint32_t)size); cmp_data = (uint32_t *)FUZZ_malloc(cmp_data_capacity); - - FUZZ_dataProducer_cmp_par(producer, &cmp_par); - cmp_par.lossy_par = 0; /*TODO: implement lossy */ - if (FUZZ_dataProducer_uint32Range(producer, 0, 1)) - cmp_par_ptr = &cmp_par; - use_decmp_buf = FUZZ_dataProducer_int32Range(producer, 0, 1); use_decmp_up_model = FUZZ_dataProducer_int32Range(producer, 0, 1);