]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3294. [bug] isccc/cc.c:table_fromwire failed to free alist on
authorMark Andrews <marka@isc.org>
Thu, 8 Mar 2012 03:28:26 +0000 (14:28 +1100)
committerMark Andrews <marka@isc.org>
Thu, 8 Mar 2012 03:28:26 +0000 (14:28 +1100)
                        error. [RT #28265]

CHANGES
bin/named/controlconf.c
lib/isccc/cc.c

diff --git a/CHANGES b/CHANGES
index 5f9d9ee2ba095d2084d2e1e8b7f9b8199025e35d..2752138eeb43de1cd248eb25722eb215e8e14b99 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3294.  [bug]           isccc/cc.c:table_fromwire failed to free alist on
+                       error. [RT #28265]
+
 3293.  [func]          nsupdate: list supported type. [RT #28261]
 
 3292.  [func]          Log messages in the axfr stream at debug 10.
index 964561a69b3bb5ee8f48916ec5d732cf858554fd..7fbc948630f03ef7fafcebc333069ab898d66c68 100644 (file)
@@ -373,17 +373,8 @@ control_recvmessage(isc_task_t *task, isc_event_t *event) {
                if (result == ISC_R_SUCCESS)
                        break;
                isc_mem_put(listener->mctx, secret.rstart, REGION_SIZE(secret));
-               if (result == ISCCC_R_BADAUTH) {
-                       /*
-                        * For some reason, request is non-NULL when
-                        * isccc_cc_fromwire returns ISCCC_R_BADAUTH.
-                        */
-                       if (request != NULL)
-                               isccc_sexpr_free(&request);
-               } else {
-                       log_invalid(&conn->ccmsg, result);
-                       goto cleanup;
-               }
+               log_invalid(&conn->ccmsg, result);
+               goto cleanup;
        }
 
        if (key == NULL) {
index cfa1db662e38f5e4d304cf0de158a3577c71dcbb..799e34384d498a91c22b4d13a0055900aeec5677 100644 (file)
@@ -403,16 +403,17 @@ table_fromwire(isccc_region_t *source, isccc_region_t *secret,
 
        if (secret != NULL) {
                if (checksum_rstart != NULL)
-                       return (verify(alist, checksum_rstart,
-                                      (source->rend - checksum_rstart),
-                                      secret));
-               return (ISCCC_R_BADAUTH);
-       }
-
-       return (ISC_R_SUCCESS);
+                       result = verify(alist, checksum_rstart,
+                                       (source->rend - checksum_rstart),
+                                       secret);
+               else
+                       result = ISCCC_R_BADAUTH;
+       } else
+               result = ISC_R_SUCCESS;
 
  bad:
-       isccc_sexpr_free(&alist);
+       if (result != ISC_R_SUCCESS)
+               isccc_sexpr_free(&alist);
 
        return (result);
 }