From: Aydın Mercan Date: Thu, 18 Jun 2026 06:45:00 +0000 (+0300) Subject: add unit test for invalid dnstap entries X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c737e3160ed6ede328561dfdfc5f819fec8d2889;p=thirdparty%2Fbind9.git add unit test for invalid dnstap entries Test `dns_dt_parse` against: - query nanosecond field over a second - response nanosecond field over a second - invalid message type field --- diff --git a/tests/dns/dnstap_test.c b/tests/dns/dnstap_test.c index 94d17040ee3..b38585a1dc9 100644 --- a/tests/dns/dnstap_test.c +++ b/tests/dns/dnstap_test.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -39,6 +40,7 @@ #include #include +#include #define TAPFILE TESTS_DIR "/testdata/dnstap/dnstap.file" #define TAPSOCK TESTS_DIR "/testdata/dnstap/dnstap.sock" @@ -367,11 +369,67 @@ ISC_LOOP_TEST_IMPL(dns_dt_totext) { isc_loopmgr_shutdown(); } +static void +correct_dnstap_parse(const char *path) { + isc_result_t result; + dns_dtdata_t *dt = NULL; + isc_region_t src; + uint8_t buf[640]; + size_t len; + FILE *f; + + f = fopen(path, "r"); + assert_non_null(f); + len = fread(buf, 1, sizeof(buf), f); + assert_uint_in_range(len, 1, sizeof(buf) - 1); + fclose(f); + + src = (isc_region_t){ buf, len }; + result = dns_dt_parse(isc_g_mctx, &src, &dt); + assert_int_equal(result, ISC_R_SUCCESS); + dns_dtdata_free(&dt); +} + +static void +invalid_dnstap_parse(const char *path) { + isc_result_t result; + dns_dtdata_t *dt = NULL; + isc_region_t src; + uint8_t buf[640]; + size_t len; + FILE *f; + + f = fopen(path, "r"); + assert_non_null(f); + len = fread(buf, 1, sizeof(buf), f); + assert_uint_in_range(len, 1, sizeof(buf) - 1); + fclose(f); + + src = (isc_region_t){ buf, len }; + result = dns_dt_parse(isc_g_mctx, &src, &dt); + assert_int_equal(result, DNS_R_BADDNSTAP); +} + +ISC_RUN_TEST_IMPL(dns_dt_parse) { + correct_dnstap_parse( + TESTS_DIR "/testdata/dnstap/correct_response_nanosec.dnstap"); + correct_dnstap_parse(TESTS_DIR + "/testdata/dnstap/correct_query_nanosec.dnstap"); + invalid_dnstap_parse( + TESTS_DIR "/testdata/dnstap/response_time_nanosec_big.dnstap"); + invalid_dnstap_parse(TESTS_DIR + "/testdata/dnstap/query_time_nanosec_big.dnstap"); + + invalid_dnstap_parse(TESTS_DIR + "/testdata/dnstap/invalid_message_type.dnstap"); +} + ISC_TEST_LIST_START ISC_TEST_ENTRY_CUSTOM(dns_dt_create, setup, teardown) ISC_TEST_ENTRY_CUSTOM(dns_dt_send, setup, teardown) ISC_TEST_ENTRY_CUSTOM(dns_dt_totext, setup, teardown) +ISC_TEST_ENTRY(dns_dt_parse) ISC_TEST_LIST_END diff --git a/tests/dns/testdata/dnstap/correct_query_nanosec.dnstap b/tests/dns/testdata/dnstap/correct_query_nanosec.dnstap new file mode 100644 index 00000000000..8f2cc2e3308 Binary files /dev/null and b/tests/dns/testdata/dnstap/correct_query_nanosec.dnstap differ diff --git a/tests/dns/testdata/dnstap/correct_response_nanosec.dnstap b/tests/dns/testdata/dnstap/correct_response_nanosec.dnstap new file mode 100644 index 00000000000..99a37b74f7f Binary files /dev/null and b/tests/dns/testdata/dnstap/correct_response_nanosec.dnstap differ diff --git a/tests/dns/testdata/dnstap/invalid_message_type.dnstap b/tests/dns/testdata/dnstap/invalid_message_type.dnstap new file mode 100644 index 00000000000..0360428b4fd Binary files /dev/null and b/tests/dns/testdata/dnstap/invalid_message_type.dnstap differ diff --git a/tests/dns/testdata/dnstap/query_time_nanosec_big.dnstap b/tests/dns/testdata/dnstap/query_time_nanosec_big.dnstap new file mode 100644 index 00000000000..397f3c831d7 Binary files /dev/null and b/tests/dns/testdata/dnstap/query_time_nanosec_big.dnstap differ diff --git a/tests/dns/testdata/dnstap/response_time_nanosec_big.dnstap b/tests/dns/testdata/dnstap/response_time_nanosec_big.dnstap new file mode 100644 index 00000000000..0dbdc319cf2 Binary files /dev/null and b/tests/dns/testdata/dnstap/response_time_nanosec_big.dnstap differ