]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix memory leak when message parse fails partway through copy.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 13 Sep 2018 12:30:44 +0000 (12:30 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 13 Sep 2018 12:30:44 +0000 (12:30 +0000)
- remove unused udpsize assignment in message encode.

git-svn-id: file:///svn/unbound/trunk@4904 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
util/data/msgencode.c
util/data/msgreply.c

index 4626c87b872bf831f2c4805059217a5a156ff123..eaa019a3e51f16372f741ab36d9d2fa1ca8f6f7d 100644 (file)
@@ -18,6 +18,8 @@
        - in authzone check that node exists before adding rrset.
        - in unbound-anchor, use readwrite memory BIO.
        - assertion in autotrust that packed rrset is formed correctly.
+       - Fix memory leak when message parse fails partway through copy.
+       - remove unused udpsize assignment in message encode.
 
 11 September 2018: Wouter
        - Fixed unused return value warnings in contrib/fastrpz.patch for
index aab7f5dfecbaac6893721882b9fb12342c925593..6bc3216ff9e931a62b681b86a8c61c6538e3ba33 100644 (file)
@@ -647,8 +647,6 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep,
        sldns_buffer_clear(buffer);
        if(udpsize < sldns_buffer_limit(buffer))
                sldns_buffer_set_limit(buffer, udpsize);
-       else if(sldns_buffer_limit(buffer) < udpsize)
-               udpsize = sldns_buffer_limit(buffer);
        if(sldns_buffer_remaining(buffer) < LDNS_HEADER_SIZE)
                return 0;
 
index 540d7d4b3decc8a3c3d9aa53f2d2bb696c2d8a3f..45d42a87f4584e702082846b1f65d208ca971bfa 100644 (file)
@@ -441,10 +441,14 @@ parse_create_msg(sldns_buffer* pkt, struct msg_parse* msg,
                return 0;
        if(!parse_create_repinfo(msg, rep, region))
                return 0;
-       if(!reply_info_alloc_rrset_keys(*rep, alloc, region))
+       if(!reply_info_alloc_rrset_keys(*rep, alloc, region)) {
+               if(!region) reply_info_parsedelete(*rep, alloc);
                return 0;
-       if(!parse_copy_decompress(pkt, msg, *rep, region))
+       }
+       if(!parse_copy_decompress(pkt, msg, *rep, region)) {
+               if(!region) reply_info_parsedelete(*rep, alloc);
                return 0;
+       }
        return 1;
 }