]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Increase the BUFSIZ-long buffers
authorOndřej Surý <ondrej@isc.org>
Thu, 14 Jul 2022 11:48:45 +0000 (13:48 +0200)
committerAram Sargsyan <aram@isc.org>
Fri, 15 Jul 2022 10:33:46 +0000 (10:33 +0000)
The BUFSIZ value varies between platforms, it could be 8K on Linux and
512 bytes on mingw.  Make sure the buffers are always big enough for the
output data to prevent truncation of the output by appropriately
enlarging or sizing the buffers.

bin/named/server.c
bin/tests/system/feature-test.c
lib/dns/adb.c
lib/dns/private.c
lib/dns/resolver.c
lib/ns/client.c

index d28926914e5002596b9f36a990daf264e651660f..7c2499ea2ae705d3629de37d50fac21026322c98 100644 (file)
@@ -14921,7 +14921,12 @@ named_server_signing(named_server_t *server, isc_lex_t *lex,
                     result = dns_rdataset_next(&privset))
                {
                        dns_rdata_t priv = DNS_RDATA_INIT;
-                       char output[BUFSIZ];
+                       /*
+                        * In theory, the output buffer could hold a full RDATA
+                        * record which is 16-bit and then some text around
+                        * it
+                        */
+                       char output[UINT16_MAX + BUFSIZ];
                        isc_buffer_t buf;
 
                        dns_rdataset_current(&privset, &priv);
index 30e6e14575ed9ced929ef92672425ae640825a4c..3435c91e07f7e962cd64f01d77e839aa82819582 100644 (file)
@@ -11,6 +11,7 @@
  * information regarding copyright ownership.
  */
 
+#include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 #include <dns/edns.h>
 
-#ifndef MAXHOSTNAMELEN
-#ifdef HOST_NAME_MAX
-#define MAXHOSTNAMELEN HOST_NAME_MAX
-#else /* ifdef HOST_NAME_MAX */
-#define MAXHOSTNAMELEN 256
-#endif /* ifdef HOST_NAME_MAX */
-#endif /* ifndef MAXHOSTNAMELEN */
-
 static void
 usage(void) {
        fprintf(stderr, "usage: feature-test <arg>\n");
@@ -91,7 +84,7 @@ main(int argc, char **argv) {
        }
 
        if (strcmp(argv[1], "--gethostname") == 0) {
-               char hostname[MAXHOSTNAMELEN];
+               char hostname[_POSIX_HOST_NAME_MAX + 1];
                int n;
 
                n = gethostname(hostname, sizeof(hostname));
index b97f3e63905c71286060178293bbe984c5375932..3ff149a77404ebae68077f0bd18862a04e7bf625 100644 (file)
@@ -3010,7 +3010,7 @@ dns_adb_dumpquota(dns_adb_t *adb, isc_buffer_t **buf) {
                     entry = ISC_LIST_NEXT(entry, plink))
                {
                        char addrbuf[ISC_NETADDR_FORMATSIZE];
-                       char text[BUFSIZ];
+                       char text[ISC_NETADDR_FORMATSIZE + BUFSIZ];
                        isc_netaddr_t netaddr;
 
                        if (entry->atr == 0.0 && entry->quota == adb->quota) {
index 58deda095a969cb1e51385612b2a900403776821..cbf947f8cccb7a8c91d13b8b4add636b56c78418 100644 (file)
@@ -383,7 +383,8 @@ dns_private_totext(dns_rdata_t *private, isc_buffer_t *buf) {
        } else if (private->length == 5) {
                unsigned char alg = private->data[0];
                dns_keytag_t keyid = (private->data[2] | private->data[1] << 8);
-               char keybuf[BUFSIZ], algbuf[DNS_SECALG_FORMATSIZE];
+               char keybuf[DNS_SECALG_FORMATSIZE + BUFSIZ],
+                       algbuf[DNS_SECALG_FORMATSIZE];
                bool del = private->data[3];
                bool complete = private->data[4];
 
index ddc0ed50419b6e8ecf78bce547080c9807c43589..7fa7040aa2c3abbe4d485fc8dba939c7785b6443 100644 (file)
@@ -11538,7 +11538,8 @@ dns_resolver_dumpquota(dns_resolver_t *res, isc_buffer_t **buf) {
                for (fctxcount_t *fc = ISC_LIST_HEAD(bucket->list); fc != NULL;
                     fc = ISC_LIST_NEXT(fc, link))
                {
-                       char nb[DNS_NAME_FORMATSIZE], text[BUFSIZ];
+                       char nb[DNS_NAME_FORMATSIZE],
+                               text[DNS_NAME_FORMATSIZE + BUFSIZ];
 
                        if (fc->count < spill) {
                                continue;
index 836cedc8e1ad3e69f1dbbc7a70fc9b770a89f613..436cc19a89c955277c77773b45a1159655731c1b 100644 (file)
@@ -12,6 +12,7 @@
  */
 
 #include <inttypes.h>
+#include <limits.h>
 #include <stdbool.h>
 
 #include <isc/aes.h>
@@ -955,7 +956,7 @@ isc_result_t
 ns_client_addopt(ns_client_t *client, dns_message_t *message,
                 dns_rdataset_t **opt) {
        unsigned char ecs[ECS_SIZE];
-       char nsid[BUFSIZ], *nsidp = NULL;
+       char nsid[_POSIX_HOST_NAME_MAX + 1], *nsidp = NULL;
        unsigned char cookie[COOKIE_SIZE];
        isc_result_t result;
        dns_view_t *view = NULL;