diff --git a/fuzz/fuzz_config_reader.c b/fuzz/fuzz_config_reader.c index 880e594..9363d26 100644 --- a/fuzz/fuzz_config_reader.c +++ b/fuzz/fuzz_config_reader.c @@ -37,6 +37,7 @@ int main(int argc, char *argv[]) { memset(&config, 0, sizeof(config)); parse_tx_config(tmpfile, &config); validate_tx_config(&config); + dvledtx_config_free(&config); unlink(tmpfile); } @@ -51,6 +52,7 @@ int main(int argc, char *argv[]) { memset(&config, 0, sizeof(config)); parse_tx_config(argv[1], &config); validate_tx_config(&config); + dvledtx_config_free(&config); #endif return 0; diff --git a/fuzz/fuzz_config_reader_libfuzzer.c b/fuzz/fuzz_config_reader_libfuzzer.c index 8d236e4..febeac6 100644 --- a/fuzz/fuzz_config_reader_libfuzzer.c +++ b/fuzz/fuzz_config_reader_libfuzzer.c @@ -40,6 +40,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { memset(&config, 0, sizeof(config)); parse_tx_config(tmpfile, &config); validate_tx_config(&config); + dvledtx_config_free(&config); unlink(tmpfile); return 0; diff --git a/tests/test_config_reader.c b/tests/test_config_reader.c index bb9609c..a7d2f2f 100644 --- a/tests/test_config_reader.c +++ b/tests/test_config_reader.c @@ -114,6 +114,7 @@ static void test_parse_3sessions_session_count(void **state) struct dvledtx_config cfg; assert_int_equal(parse_tx_config(FIXTURE_3SESSIONS, &cfg), 0); assert_int_equal(cfg.session_count, 3); + dvledtx_config_free(&cfg); } static void test_parse_1session_session_count(void **state) @@ -122,6 +123,7 @@ static void test_parse_1session_session_count(void **state) struct dvledtx_config cfg; assert_int_equal(parse_tx_config(FIXTURE_1SESSION, &cfg), 0); assert_int_equal(cfg.session_count, 1); + dvledtx_config_free(&cfg); } static void test_parse_3sessions_interface_fields(void **state) @@ -132,6 +134,7 @@ static void test_parse_3sessions_interface_fields(void **state) assert_string_equal(cfg.interface_name[0], "0000:03:10.1"); assert_string_equal(cfg.interface_sip[0], "192.168.50.29"); assert_string_equal(cfg.interface_dip[0], "239.168.85.21"); + dvledtx_config_free(&cfg); } static void test_parse_3sessions_video_params(void **state) @@ -143,6 +146,7 @@ static void test_parse_3sessions_video_params(void **state) assert_int_equal((int)cfg.height, 1080); assert_int_equal(cfg.fps, 30); assert_string_equal(cfg.fmt, "yuv422p10le"); + dvledtx_config_free(&cfg); } static void test_parse_3sessions_log_file(void **state) @@ -151,6 +155,7 @@ static void test_parse_3sessions_log_file(void **state) struct dvledtx_config cfg; assert_int_equal(parse_tx_config(FIXTURE_3SESSIONS, &cfg), 0); assert_string_equal(cfg.log_file, "dvledtx.log"); + dvledtx_config_free(&cfg); } static void test_parse_3sessions_session0_crop(void **state) @@ -166,6 +171,7 @@ static void test_parse_3sessions_session0_crop(void **state) assert_int_equal(s->crop_y, 0); assert_int_equal(s->crop_w, 640); assert_int_equal(s->crop_h, 1080); + dvledtx_config_free(&cfg); } static void test_parse_3sessions_session1_crop(void **state) @@ -181,6 +187,7 @@ static void test_parse_3sessions_session1_crop(void **state) assert_int_equal(s->crop_y, 0); assert_int_equal(s->crop_w, 640); assert_int_equal(s->crop_h, 1080); + dvledtx_config_free(&cfg); } static void test_parse_3sessions_session2_crop(void **state) @@ -196,6 +203,7 @@ static void test_parse_3sessions_session2_crop(void **state) assert_int_equal(s->crop_y, 0); assert_int_equal(s->crop_w, 640); assert_int_equal(s->crop_h, 1080); + dvledtx_config_free(&cfg); } static void test_parse_returns_minus1_when_sessions_key_absent(void **state) @@ -213,6 +221,7 @@ static void test_parse_returns_minus1_when_sessions_key_absent(void **state) unlink(path); free(path); assert_int_equal(ret, -1); + dvledtx_config_free(&cfg); } static void test_parse_returns_minus1_when_sessions_array_empty(void **state) @@ -231,6 +240,7 @@ static void test_parse_returns_minus1_when_sessions_array_empty(void **state) unlink(path); free(path); assert_int_equal(ret, -1); + dvledtx_config_free(&cfg); } static void test_parse_returns_zero_fields_when_video_missing(void **state) @@ -253,6 +263,7 @@ static void test_parse_returns_zero_fields_when_video_missing(void **state) assert_int_equal((int)cfg.width, 0); assert_int_equal((int)cfg.height, 0); assert_int_equal(cfg.fps, 0); + dvledtx_config_free(&cfg); } /* ========================================================================== @@ -583,6 +594,7 @@ static void test_parse_session_missing_udp_port_fails(void **state) int ret = parse_tx_config(path, &cfg); unlink(path); free(path); assert_int_equal(ret, -1); + dvledtx_config_free(&cfg); } static void test_parse_session_udp_port_exceeds_65535_fails(void **state) @@ -600,6 +612,7 @@ static void test_parse_session_udp_port_exceeds_65535_fails(void **state) int ret = parse_tx_config(path, &cfg); unlink(path); free(path); assert_int_equal(ret, -1); + dvledtx_config_free(&cfg); } static void test_parse_session_missing_payload_type_defaults_to_96(void **state) @@ -618,6 +631,7 @@ static void test_parse_session_missing_payload_type_defaults_to_96(void **state) unlink(path); free(path); assert_int_equal(ret, 0); assert_int_equal(cfg.sessions[0].payload_type, 96); + dvledtx_config_free(&cfg); } static void test_parse_session_no_crop_object_fails(void **state) @@ -634,6 +648,7 @@ static void test_parse_session_no_crop_object_fails(void **state) int ret = parse_tx_config(path, &cfg); unlink(path); free(path); assert_int_equal(ret, -1); + dvledtx_config_free(&cfg); } /* ========================================================================== @@ -1175,6 +1190,7 @@ static void test_parse_session_negative_crop_x_fails(void **state) unlink(path); free(path); /* Missing crop "x" — extract_json_int returns -1, parse must fail */ assert_int_equal(ret, -1); + dvledtx_config_free(&cfg); } static void test_parse_session_zero_crop_w_fails(void **state) @@ -1192,6 +1208,7 @@ static void test_parse_session_zero_crop_w_fails(void **state) int ret = parse_tx_config(path, &cfg); unlink(path); free(path); assert_int_equal(ret, -1); + dvledtx_config_free(&cfg); } /* ==========================================================================