]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
knot_rdataset_copy(): allow NULL source rdata if empty
authorDaniel Salzman <daniel.salzman@nic.cz>
Thu, 7 Nov 2019 18:22:45 +0000 (19:22 +0100)
committerDaniel Salzman <daniel.salzman@nic.cz>
Thu, 7 Nov 2019 18:23:19 +0000 (19:23 +0100)
Fixup for bb0d2fb501158763f2fc417ffa902cea5b82695c

src/libknot/rdataset.c

index 65a43865e03c071451ac6e8f5e45cfff52955d4e..19c420726ea7bf3ed54a5cbc69dda313462853de 100644 (file)
@@ -137,18 +137,24 @@ void knot_rdataset_clear(knot_rdataset_t *rrs, knot_mm_t *mm)
 _public_
 int knot_rdataset_copy(knot_rdataset_t *dst, const knot_rdataset_t *src, knot_mm_t *mm)
 {
-       if (dst == NULL || src == NULL || src->rdata == NULL) {
+       if (dst == NULL || src == NULL) {
                return KNOT_EINVAL;
        }
 
        dst->count = src->count;
        dst->size = src->size;
-       dst->rdata = mm_alloc(mm, src->size);
-       if (dst->rdata == NULL) {
-               return KNOT_ENOMEM;
-       }
 
-       memcpy(dst->rdata, src->rdata, src->size);
+       if (src->count > 0) {
+               assert(src->rdata != NULL);
+               dst->rdata = mm_alloc(mm, src->size);
+               if (dst->rdata == NULL) {
+                       return KNOT_ENOMEM;
+               }
+               memcpy(dst->rdata, src->rdata, src->size);
+       } else {
+               assert(src->size == 0);
+               dst->rdata = NULL;
+       }
 
        return KNOT_EOK;
 }