]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
fixup libunbound message buffer.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 6 Jan 2009 17:50:56 +0000 (17:50 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 6 Jan 2009 17:50:56 +0000 (17:50 +0000)
git-svn-id: file:///svn/unbound/trunk@1412 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
libunbound/libworker.c

index 39555c3a1c44cacf197ee915ae13d93a63878c03..b0c6846308450889d245c084ae614b4e912bdd17 100644 (file)
@@ -11,6 +11,7 @@
        - fix reading included config files when chrooted.
          Give full path names for include files.
          Relative path names work if the start dir equals the working dir.
+       - fix libunbound message transport when no packet buffer is available.
 
 5 January 2009: Wouter
        - fixup getaddrinfo failure handling for remote control port.
index b18d555148748d063ee4ee04fce86207f6703f44..10baff79a7612547eb4fc34d5ac5ddd3d6e4b8f2 100644 (file)
@@ -539,11 +539,15 @@ add_bg_result(struct libworker* w, struct ctx_query* q, ldns_buffer* pkt,
        /* serialize and delete unneeded q */
        if(w->is_bg_thread) {
                lock_basic_lock(&w->ctx->cfglock);
-               q->msg_len = ldns_buffer_remaining(pkt);
-               q->msg = memdup(ldns_buffer_begin(pkt), q->msg_len);
-               if(!q->msg)
-                       msg = context_serialize_answer(q, UB_NOMEM, NULL, &len);
-               else    msg = context_serialize_answer(q, err, NULL, &len);
+               if(pkt) {
+                       q->msg_len = ldns_buffer_remaining(pkt);
+                       q->msg = memdup(ldns_buffer_begin(pkt), q->msg_len);
+                       if(!q->msg)
+                               msg = context_serialize_answer(q, UB_NOMEM, 
+                               NULL, &len);
+                       else    msg = context_serialize_answer(q, err, 
+                               NULL, &len);
+               } else msg = context_serialize_answer(q, err, NULL, &len);
                lock_basic_unlock(&w->ctx->cfglock);
        } else {
                msg = context_serialize_answer(q, err, pkt, &len);