From: Vladimír Čunát Date: Tue, 6 Apr 2021 17:55:58 +0000 (+0200) Subject: treewide: fix instances of memcpy(*, NULL, 0) X-Git-Tag: v3.1.0~175^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd5f890124fe958fb87272fbc2b2ca0e5930ddde;p=thirdparty%2Fknot-dns.git treewide: fix instances of memcpy(*, NULL, 0) I don't think they could cause any practical issues, but they popped out when using sanitizing Knot with Resolver. --- diff --git a/src/contrib/vpool/vpool.c b/src/contrib/vpool/vpool.c index b7c03057b8..f130a47ded 100644 --- a/src/contrib/vpool/vpool.c +++ b/src/contrib/vpool/vpool.c @@ -88,7 +88,9 @@ vpool_resize(struct vpool *pool, size_t datsize) return (ENOMEM); } - memcpy(ret, pool->v_buf, pool->v_off); + if (pool->v_off > 0) { + memcpy(ret, pool->v_buf, pool->v_off); + } free(pool->v_basebuf); pool->v_basebuf = pool->v_buf = ret; pool->v_size = size; diff --git a/src/libknot/packet/pkt.c b/src/libknot/packet/pkt.c index ddda72e497..381a8dee6e 100644 --- a/src/libknot/packet/pkt.c +++ b/src/libknot/packet/pkt.c @@ -157,13 +157,13 @@ static int pkt_rr_array_alloc(knot_pkt_t *pkt, uint16_t count) return KNOT_ENOMEM; } - /* Copy the old data. */ - memcpy(rr_info, pkt->rr_info, pkt->rrset_allocd * sizeof(knot_rrinfo_t)); - memcpy(rr, pkt->rr, pkt->rrset_allocd * sizeof(knot_rrset_t)); - - /* Reassign and free old data. */ - mm_free(&pkt->mm, pkt->rr); - mm_free(&pkt->mm, pkt->rr_info); + /* Copy and free the old data, if any. */ + if (pkt->rrset_allocd > 0) { + memcpy(rr_info, pkt->rr_info, pkt->rrset_allocd * sizeof(knot_rrinfo_t)); + memcpy(rr, pkt->rr, pkt->rrset_allocd * sizeof(knot_rrset_t)); + mm_free(&pkt->mm, pkt->rr); + mm_free(&pkt->mm, pkt->rr_info); + } pkt->rr = rr; pkt->rr_info = rr_info; pkt->rrset_allocd = next_size;