]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
treewide: fix instances of memcpy(*, NULL, 0)
authorVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 6 Apr 2021 17:55:58 +0000 (19:55 +0200)
committerDaniel Salzman <daniel.salzman@nic.cz>
Fri, 9 Apr 2021 06:55:54 +0000 (08:55 +0200)
I don't think they could cause any practical issues,
but they popped out when using sanitizing Knot with Resolver.

src/contrib/vpool/vpool.c
src/libknot/packet/pkt.c

index b7c03057b8a9da304857cd81f1526f8d3d48f3e6..f130a47ded073b4fc92573661beb666d1af86ff2 100644 (file)
@@ -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;
index ddda72e497e55a335201343d9348fca1fdf9d12f..381a8dee6ea5eba4cd4adb510b01ca5e0ba686bf 100644 (file)
@@ -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;