]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
address memory leak in change #3662, force format matching, attempt to address coveri...
authorMark Andrews <marka@isc.org>
Fri, 25 Oct 2013 23:04:36 +0000 (10:04 +1100)
committerMark Andrews <marka@isc.org>
Fri, 25 Oct 2013 23:04:36 +0000 (10:04 +1100)
bin/dig/dighost.c
lib/dns/rdata/generic/isdn_20.c
lib/dns/zone.c

index 4b87a9727768f10f8af26cbb555ead4fa3956ac5..aa1f70e9516727c48a217838a9fa93d9501edaa5 100644 (file)
@@ -543,8 +543,8 @@ debug(const char *format, ...) {
                if (debugtiming) {
                        struct timeval tv;
                        (void)gettimeofday(&tv, NULL);
-                       fprintf(stderr, "%ld.%06d: ", (long)tv.tv_sec,
-                               tv.tv_usec);
+                       fprintf(stderr, "%ld.%06ld: ", (long)tv.tv_sec,
+                               (long)tv.tv_usec);
                }
                va_start(args, format);
                vfprintf(stderr, format, args);
@@ -2829,11 +2829,13 @@ launch_next_query(dig_query_t *query, isc_boolean_t include_question) {
        isc_buffer_putuint16(&query->slbuf, (isc_uint16_t) query->sendbuf.used);
        ISC_LIST_INIT(query->sendlist);
        ISC_LINK_INIT(&query->slbuf, link);
-       buffer = clone_buffer(&query->slbuf);
-       ISC_LIST_ENQUEUE(query->sendlist, buffer, link);
-       if (include_question) {
-               buffer = clone_buffer(&query->sendbuf);
+       if (!query->first_soa_rcvd) {
+               buffer = clone_buffer(&query->slbuf);
                ISC_LIST_ENQUEUE(query->sendlist, buffer, link);
+               if (include_question) {
+                       buffer = clone_buffer(&query->sendbuf);
+                       ISC_LIST_ENQUEUE(query->sendlist, buffer, link);
+               }
        }
 
        ISC_LINK_INIT(&query->lengthbuf, link);
index feb9555031f9664c8b65247940f3f6a343edc24e..d48d7a384965d906bd09ed4b8b2177bcfbc335b9 100644 (file)
@@ -127,7 +127,7 @@ fromstruct_isdn(ARGS_FROMSTRUCT) {
 
        RETERR(uint8_tobuffer(isdn->isdn_len, target));
        RETERR(mem_tobuffer(target, isdn->isdn, isdn->isdn_len));
-       if (isdn->subaddress == NULL && isdn->subaddress_len == 0)
+       if (isdn->subaddress == NULL)
                return (ISC_R_SUCCESS);
        RETERR(uint8_tobuffer(isdn->subaddress_len, target));
        return (mem_tobuffer(target, isdn->subaddress, isdn->subaddress_len));
index 6269e761eee00cd516cf44b6754376cd104c0b96..e11964b425ed2772a124414e5a0b7345aa801f96 100644 (file)
@@ -9279,6 +9279,7 @@ dns_zone_markdirty(dns_zone_t *zone) {
                if (inline_raw(zone)) {
                        unsigned int soacount;
                        secure = zone->secure;
+                       INSIST(secure != zone);
                        TRYLOCK_ZONE(result, secure);
                        if (result != ISC_R_SUCCESS) {
                                UNLOCK_ZONE(zone);
@@ -13566,6 +13567,7 @@ dns_zone_replacedb(dns_zone_t *zone, dns_db_t *db, isc_boolean_t dump) {
        LOCK_ZONE(zone);
        if (inline_raw(zone)) {
                secure = zone->secure;
+               INSIST(secure != zone);
                TRYLOCK_ZONE(result, secure);
                if (result != ISC_R_SUCCESS) {
                        UNLOCK_ZONE(zone);
@@ -13826,6 +13828,7 @@ zone_xfrdone(dns_zone_t *zone, isc_result_t result) {
        LOCK_ZONE(zone);
        if (inline_raw(zone)) {
                secure = zone->secure;
+               INSIST(secure != zone);
                TRYLOCK_ZONE(result, secure);
                if (result != ISC_R_SUCCESS) {
                        UNLOCK_ZONE(zone);