From: Mark Andrews Date: Fri, 15 Sep 2017 03:14:16 +0000 (+1000) Subject: don't use strlcat with non NUL terminated strings rt45981_stage3 X-Git-Tag: v9.12.0b1~194 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dc71aa898a4d4a56ca9cb60215e9b0907a1518c3;p=thirdparty%2Fbind9.git don't use strlcat with non NUL terminated strings rt45981_stage3 --- diff --git a/lib/dns/rcode.c b/lib/dns/rcode.c index 8cad290937e..aaec1afa1d0 100644 --- a/lib/dns/rcode.c +++ b/lib/dns/rcode.c @@ -252,8 +252,8 @@ maybe_numeric(unsigned int *valuep, isc_textregion_t *source, * isc_parse_uint32(). isc_parse_uint32() requires * null termination, so we must make a copy. */ - strlcpy(buffer, source->base, - ISC_MIN(source->length + 1, sizeof(buffer))); + snprintf(buffer, sizeof(buffer), "%.*s", + (int)source->length, source->base); INSIST(buffer[source->length] == '\0'); @@ -508,8 +508,8 @@ dns_rdataclass_fromtext(dns_rdataclass_t *classp, isc_textregion_t *source) { * source->base is not required to be NUL terminated. * Copy up to remaining bytes and NUL terminate. */ - strlcpy(buf, source->base + 5, - ISC_MIN(source->length - 5 + 1, sizeof(buf))); + snprintf(buf, sizeof(buf), "%.*s", + (int)(source->length - 5), source->base + 5); val = strtoul(buf, &endp, 10); if (*endp == '\0' && val <= 0xffff) { *classp = (dns_rdataclass_t)val; diff --git a/lib/dns/rdata.c b/lib/dns/rdata.c index fd55eff6954..f1c86e2dbf6 100644 --- a/lib/dns/rdata.c +++ b/lib/dns/rdata.c @@ -1343,8 +1343,8 @@ dns_rdatatype_fromtext(dns_rdatatype_t *typep, isc_textregion_t *source) { * source->base is not required to be NUL terminated. * Copy up to remaining bytes and NUL terminate. */ - strlcpy(buf, source->base + 4, - ISC_MIN(source->length - 4 + 1, sizeof(buf))); + snprintf(buf, sizeof(buf), "%.*s", + (int)(source->length - 4), source->base + 4); val = strtoul(buf, &endp, 10); if (*endp == '\0' && val <= 0xffff) { *typep = (dns_rdatatype_t)val; diff --git a/lib/dns/ttl.c b/lib/dns/ttl.c index 1afca6426c4..06239c4dd2d 100644 --- a/lib/dns/ttl.c +++ b/lib/dns/ttl.c @@ -160,7 +160,7 @@ bind_ttl(isc_textregion_t *source, isc_uint32_t *ttl) { if (source->length > sizeof(buf) - 1) return (DNS_R_SYNTAX); /* Copy source->length bytes and NUL terminate. */ - strlcpy(buf, source->base, ISC_MIN(source->length + 1, sizeof(buf))); + snprintf(buf, sizeof(buf), "%.*s", (int)source->length, source->base); s = buf; do {