From c6cefd13eb55c8124a01e90021282f8610a05012 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 29 Nov 2015 14:29:31 +0100 Subject: [PATCH] dns-domain: make sure dns_name_to_wire_format() may properly encode the root domain The root domain consists of zero labels, and we should be able to encode that. --- src/shared/dns-domain.c | 10 ++++------ src/test/test-dns-domain.c | 3 ++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c index ab61eb3b6ef..ba6eff8f60c 100644 --- a/src/shared/dns-domain.c +++ b/src/shared/dns-domain.c @@ -866,19 +866,17 @@ bool dns_name_is_single_label(const char *name) { /* Encode a domain name according to RFC 1035 Section 3.1 */ int dns_name_to_wire_format(const char *domain, uint8_t *buffer, size_t len) { - uint8_t *label_length; - uint8_t *out; + uint8_t *label_length, *out; int r; - assert_return(buffer, -EINVAL); - assert_return(domain, -EINVAL); - assert_return(domain[0], -EINVAL); + assert(domain); + assert(buffer); out = buffer; do { /* reserve a byte for label length */ - if (len == 0) + if (len <= 0) return -ENOBUFS; len--; label_length = out; diff --git a/src/test/test-dns-domain.c b/src/test/test-dns-domain.c index 3e470c0ef2a..0762faa9a7d 100644 --- a/src/test/test-dns-domain.c +++ b/src/test/test-dns-domain.c @@ -66,11 +66,12 @@ static void test_dns_name_to_wire_format_one(const char *what, const char *expec } static void test_dns_name_to_wire_format(void) { + const char out0[] = { 0 }; const char out1[] = { 3, 'f', 'o', 'o', 0 }; const char out2[] = { 5, 'h', 'a', 'l', 'l', 'o', 3, 'f', 'o', 'o', 3, 'b', 'a', 'r', 0 }; const char out3[] = { 4, ' ', 'f', 'o', 'o', 3, 'b', 'a', 'r', 0 }; - test_dns_name_to_wire_format_one("", NULL, 0, -EINVAL); + test_dns_name_to_wire_format_one("", out0, sizeof(out0), sizeof(out0)); test_dns_name_to_wire_format_one("foo", out1, sizeof(out1), sizeof(out1)); test_dns_name_to_wire_format_one("foo", out1, sizeof(out1) + 1, sizeof(out1));