From dc71aa898a4d4a56ca9cb60215e9b0907a1518c3 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Fri, 15 Sep 2017 13:14:16 +1000 Subject: [PATCH] don't use strlcat with non NUL terminated strings rt45981_stage3 --- lib/dns/rcode.c | 8 ++++---- lib/dns/rdata.c | 4 ++-- lib/dns/ttl.c | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/dns/rcode.c b/lib/dns/rcode.c index 8cad290937..aaec1afa1d 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 fd55eff695..f1c86e2dbf 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 1afca6426c..06239c4dd2 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 {