From: Mark Andrews Date: Thu, 25 Nov 2021 02:16:56 +0000 (+1100) Subject: Exercise ISC_R_NOSPACE path in dns_sdlz_putrr X-Git-Tag: v9.17.21~17^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6dc524860622277bd24fe17d4a82454b30f5f1b5;p=thirdparty%2Fbind9.git Exercise ISC_R_NOSPACE path in dns_sdlz_putrr Use relative names when adding SOA record and a long domain name to create SOA RR where the wire format is longer than the initial buffer allocation in dns_sdlz_putrr. --- diff --git a/bin/tests/system/dlzexternal/driver/driver.c b/bin/tests/system/dlzexternal/driver/driver.c index 3a98a32f5b2..220ee223dba 100644 --- a/bin/tests/system/dlzexternal/driver/driver.c +++ b/bin/tests/system/dlzexternal/driver/driver.c @@ -255,10 +255,9 @@ dlz_create(const char *dlzname, unsigned int argc, char *argv[], void **dbdata, struct dlz_example_data *state; const char *helper_name; va_list ap; - char soa_data[1024]; - const char *extra; + char soa_data[sizeof("@ hostmaster.root 123 900 600 86400 3600")]; isc_result_t result; - int n; + size_t n; UNUSED(dlzname); @@ -292,19 +291,19 @@ dlz_create(const char *dlzname, unsigned int argc, char *argv[], void **dbdata, sprintf(state->zone_name, "%s.", argv[1]); } + /* + * Use relative names to trigger ISC_R_NOSPACE in dns_sdlz_putrr. + */ if (strcmp(state->zone_name, ".") == 0) { - extra = ".root"; + n = strlcpy(soa_data, + "@ hostmaster.root 123 900 600 86400 3600", + sizeof(soa_data)); } else { - extra = "."; + n = strlcpy(soa_data, "@ hostmaster 123 900 600 86400 3600", + sizeof(soa_data)); } - n = sprintf(soa_data, "%s hostmaster%s%s 123 900 600 86400 3600", - state->zone_name, extra, state->zone_name); - - if (n < 0) { - CHECK(ISC_R_FAILURE); - } - if ((unsigned)n >= sizeof(soa_data)) { + if (n >= sizeof(soa_data)) { CHECK(ISC_R_NOSPACE); } diff --git a/bin/tests/system/dlzexternal/ns1/named.conf.in b/bin/tests/system/dlzexternal/ns1/named.conf.in index 1fa0d458090..1721e31b714 100644 --- a/bin/tests/system/dlzexternal/ns1/named.conf.in +++ b/bin/tests/system/dlzexternal/ns1/named.conf.in @@ -46,6 +46,11 @@ dlz "example three" { database "dlopen ../driver/.libs/dlzexternal.so example.org"; }; +dlz "example four" { + // Long zone name to trigger ISC_R_NOSPACE in dns_sdlz_putrr. + database "dlopen ../driver/.libs/dlzexternal.so 123456789.123456789.123456789.123456789.123456789.example.foo"; +}; + dlz "unsearched1" { database "dlopen ../driver/.libs/dlzexternal.so other.nil"; search no;