From: Daniel Salzman Date: Thu, 7 Nov 2019 18:22:45 +0000 (+0100) Subject: knot_rdataset_copy(): allow NULL source rdata if empty X-Git-Tag: embedded_lmdb~120 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=720dc00daf4a2c9de9055dc33fd83593fd4985cd;p=thirdparty%2Fknot-dns.git knot_rdataset_copy(): allow NULL source rdata if empty Fixup for bb0d2fb501158763f2fc417ffa902cea5b82695c --- diff --git a/src/libknot/rdataset.c b/src/libknot/rdataset.c index 65a43865e0..19c420726e 100644 --- a/src/libknot/rdataset.c +++ b/src/libknot/rdataset.c @@ -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; }