Ensure block pointer in the index file is within limits - 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 c0f3292de8c30657c13d7564a0655e65df8e0459
DIR parent bf3abd9cb6cf698a89cddc3fbd635cf6d6bed45c
HTML Author: sin <sin@2f30.org>
Date: Wed, 21 Mar 2018 11:12:19 +0000
Ensure block pointer in the index file is within limits
Diffstat:
M dedup.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
---
DIR diff --git a/dedup.c b/dedup.c
@@ -267,6 +267,8 @@ extract(unsigned char *id, int fd)
for (j = 0; j < ent->nblks; j++) {
struct blk blk;
+ if (ent->blks[j] > nblks())
+ errx(1, "index is corrupted");
read_blk(&blk, ent->blks[j]);
xwrite(1, blk.data, blk.sz);
}
@@ -327,8 +329,8 @@ check(void)
for (j = 0; j < ent->nblks; j++) {
struct blk blk;
- /* XXX: If there's file corruption, ent->blks[j]
- * could point anywhere */
+ if (ent->blks[j] > nblks())
+ errx(1, "index is corrupted");
read_blk(&blk, ent->blks[j]);
SHA256_Update(&ctx, blk.data, blk.sz);
}