Hi,

over at OpenBSD we are not too fond of strcat/strcpy to put it mildly.

I hope this is acceptable.

Sorry for the inline patch, I no longer use GitHub,
Florian

>From b61c840c7f30b9e56a0da2fd6e30a836efcd5a9c Mon Sep 17 00:00:00 2001
From: Florian Obser <flor...@narrans.de>
Date: Mon, 1 Apr 2024 19:39:55 +0200
Subject: [PATCH] snprintf concatenates strings and checks the length in one
 go.

This is safer and easier to understand.
---
 options.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git options.c options.c
index 1cfeeb94..75b8e183 100644
--- options.c
+++ options.c
@@ -463,14 +463,13 @@ zone_list_member_zone_insert(struct nsd_options* opt, 
const char* nm,
                        "zone value provided in zone '%s' or pattern '%s'",
                        mem_idnm, nm, patnm);
 
-       else if(strlen(pat->catalog_producer_zone)
-             + strlen(mem_idnm) + 9 > sizeof(member_id_str))
+       else if(snprintf(member_id_str, sizeof(member_id_str),
+           "%s.zones.%s", mem_idnm, pat->catalog_producer_zone) >=
+           sizeof(member_id_str))
                log_msg(LOG_ERR, "syntax error in member ID '%s.zones.%s' for "
                        "zone '%s'", mem_idnm, pat->catalog_producer_zone, nm);
 
-       else if(!(cmz->member_id = dname_parse(opt->region, strcat(strcat(
-                               strcpy(member_id_str, mem_idnm),".zones."),
-                                       pat->catalog_producer_zone))))
+       else if(!(cmz->member_id = dname_parse(opt->region, member_id_str)))
                log_msg(LOG_ERR, "parse error in member ID '%s' for "
                        "zone '%s'", member_id_str, nm);
        return zone;
-- 
2.44.0




-- 
In my defence, I have been left unsupervised.
_______________________________________________
nsd-users mailing list
nsd-users@lists.nlnetlabs.nl
https://lists.nlnetlabs.nl/mailman/listinfo/nsd-users

Reply via email to