]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2883. [bug] 'dig +short' failed to handle really large datasets.
authorMark Andrews <marka@isc.org>
Wed, 12 May 2010 01:31:37 +0000 (01:31 +0000)
committerMark Andrews <marka@isc.org>
Wed, 12 May 2010 01:31:37 +0000 (01:31 +0000)
                        [RT #21113]

CHANGES
bin/dig/dig.c

diff --git a/CHANGES b/CHANGES
index e019a06643a659b5b74fb188959526dd7a6e70b2..fb99f6a76251ce88a6f60ff4fa176929f81d1d7e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2883.  [bug]           'dig +short' failed to handle really large datasets.
+                       [RT #21113]
+
 2882.  [bug]           Remove memory context from list of active contexts
                        before clearing 'magic'. [RT #21274]
 
index 7cf751ff82888bacc3243255bd6eb654c9cf81db..3daecbc232a1ea311d2997a52d7f9ab7baf24310 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: dig.c,v 1.235 2010/03/04 23:50:34 tbox Exp $ */
+/* $Id: dig.c,v 1.236 2010/05/12 01:31:37 marka Exp $ */
 
 /*! \file */
 
@@ -311,6 +311,8 @@ say_message(dns_rdata_t *rdata, dig_query_t *query, isc_buffer_t *buf) {
                ADD_STRING(buf, " ");
        }
        result = dns_rdata_totext(rdata, NULL, buf);
+       if (result == ISC_R_NOSPACE)
+               return (result);
        check_result(result, "dns_rdata_totext");
        if (query->lookup->identify) {
                TIME_NOW(&now);
@@ -333,10 +335,8 @@ short_answer(dns_message_t *msg, dns_messagetextflag_t flags,
 {
        dns_name_t *name;
        dns_rdataset_t *rdataset;
-       isc_buffer_t target;
        isc_result_t result, loopresult;
        dns_name_t empty_name;
-       char t[4096];
        dns_rdata_t rdata = DNS_RDATA_INIT;
 
        UNUSED(flags);
@@ -352,8 +352,6 @@ short_answer(dns_message_t *msg, dns_messagetextflag_t flags,
                name = NULL;
                dns_message_currentname(msg, DNS_SECTION_ANSWER, &name);
 
-               isc_buffer_init(&target, t, sizeof(t));
-
                for (rdataset = ISC_LIST_HEAD(name->list);
                     rdataset != NULL;
                     rdataset = ISC_LIST_NEXT(rdataset, link)) {
@@ -362,6 +360,8 @@ short_answer(dns_message_t *msg, dns_messagetextflag_t flags,
                                dns_rdataset_current(rdataset, &rdata);
                                result = say_message(&rdata, query,
                                                     buf);
+                               if (result == ISC_R_NOSPACE)
+                                       return (result);
                                check_result(result, "say_message");
                                loopresult = dns_rdataset_next(rdataset);
                                dns_rdata_reset(&rdata);