Skip to content

Commit

Permalink
tests: net: dns: Add test for invalid DNS answer parsing
Browse files Browse the repository at this point in the history
Make sure we catch invalid answer during parsing.

Signed-off-by: Jukka Rissanen <[email protected]>
  • Loading branch information
jukkar authored and TaiJuWu committed Dec 12, 2024
1 parent 9432449 commit 262cd26
Showing 1 changed file with 24 additions and 1 deletion.
25 changes: 24 additions & 1 deletion tests/net/lib/dns_packet/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ static uint8_t query_mdns[] = {

static uint16_t tid1 = 0xda0f;

static uint8_t invalid_answer_resp_ipv4[18] = {
/* DNS msg header (12 bytes) */
0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x01,
};


static int eval_query(const char *dname, uint16_t tid, enum dns_rr_type type,
uint8_t *expected, uint16_t expected_len)
{
Expand Down Expand Up @@ -1260,6 +1267,21 @@ static void test_dns_flags_len(void)
"DNS message length check failed (%d)", ret);
}

static void test_dns_invalid_answer(void)
{
struct dns_msg_t dns_msg = { 0 };
enum dns_rr_type type;
uint32_t ttl;
int ret;

dns_msg.msg = invalid_answer_resp_ipv4;
dns_msg.msg_size = sizeof(invalid_answer_resp_ipv4);
dns_msg.answer_offset = 12;

ret = dns_unpack_answer(&dns_msg, 0, &ttl, &type);
zassert_equal(ret, -EINVAL, "DNS message answer check succeed (%d)", ret);
}

void test_main(void)
{
ztest_test_suite(dns_tests,
Expand All @@ -1271,7 +1293,8 @@ void test_main(void)
ztest_unit_test(test_dns_id_len),
ztest_unit_test(test_dns_flags_len),
ztest_unit_test(test_dns_malformed_responses),
ztest_unit_test(test_dns_valid_responses)
ztest_unit_test(test_dns_valid_responses),
ztest_unit_test(test_dns_invalid_answer)
);

ztest_run_test_suite(dns_tests);
Expand Down

0 comments on commit 262cd26

Please sign in to comment.