Do not modify type in the serialization function - dedup - deduplicating backup program HTML git clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 083901e286dddcf542979c1037dea36a5f7ab1b1 DIR parent 41722ed34fe2e6aa8442410a91cbdd231e56b00a HTML Author: sin <sin@2f30.org> Date: Thu, 28 Feb 2019 13:19:15 +0000 Do not modify type in the serialization function Diffstat: M dedup.c | 15 +++++++++++++-- M types.c | 8 -------- 2 files changed, 13 insertions(+), 10 deletions(-) --- DIR diff --git a/dedup.c b/dedup.c @@ -106,9 +106,20 @@ print_stats(struct stats *st) static void append_snap(struct snapshot *snap) { + if (mul_overflow(snap->nr_blk_descs, BLK_DESC_LEN)) + errx(1, "%s: overflow", __func__); + snap->size = snap->nr_blk_descs * BLK_DESC_LEN; + + if (add_overflow(SNAPSHOT_LEN, snap->size)) + errx(1, "%s: overflow", __func__); + snap->size += SNAPSHOT_LEN; + xlseek(ifd, snap_hdr.size, SEEK_SET); write_snapshot(ifd, snap); write_snapshot_blk_descs(ifd, snap); + + if (add_overflow(snap_hdr.size, snap->size)) + errx(1, "%s: overflow", __func__); snap_hdr.size += snap->size; snap_hdr.nr_snapshots++; } @@ -136,11 +147,11 @@ grow_snap(struct snapshot *snap, uint64_t nr_blk_descs) size_t size; if (mul_overflow(nr_blk_descs, sizeof(snap->blk_desc[0]))) - errx(1, "grow_snap: overflow"); + errx(1, "%s: overflow", __func__); size = nr_blk_descs * sizeof(snap->blk_desc[0]); if (add_overflow(size, sizeof(*snap))) - errx(1, "grow_snap: overflow"); + errx(1, "%s: overflow", __func__); size += sizeof(*snap); snap = realloc(snap, size); DIR diff --git a/types.c b/types.c @@ -184,14 +184,6 @@ write_snapshot(int fd, struct snapshot *snap) char fmt[BUFSIZ]; int n; - if (mul_overflow(snap->nr_blk_descs, BLK_DESC_LEN)) - errx(1, "write_snapshot: overflow"); - snap->size = snap->nr_blk_descs * BLK_DESC_LEN; - - if (add_overflow(SNAPSHOT_LEN, snap->size)) - errx(1, "write_snapshot: overflow"); - snap->size += SNAPSHOT_LEN; - snprintf(fmt, sizeof(fmt), "q'%d'%dq", MSGSIZE, MDSIZE); n = pack(buf, fmt, snap->size,