From 90e4a2cc675da72059b655a7c0222ee03a9dd74a Mon Sep 17 00:00:00 2001 From: Robert Spalek Date: Fri, 16 Jul 2004 10:39:04 +0000 Subject: [PATCH] add Adler32 checksum to compressed V33 buckets --- lib/buck2obj.c | 4 ++++ lib/buckettool.c | 5 +++++ lib/lizard-test.c | 13 +++++++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/buck2obj.c b/lib/buck2obj.c index 57f430f6..15aac174 100644 --- a/lib/buck2obj.c +++ b/lib/buck2obj.c @@ -134,9 +134,13 @@ buck2obj_parse(struct buck2obj_buf *buf, uns buck_type, uns buck_len, struct fas RET_ERR(EINVAL); len = GET_U32(ptr); ptr += 4; + uns adler = GET_U32(ptr); + ptr += 4; byte *new_ptr = lizard_decompress_safe(ptr, buf->lizard, len); if (!new_ptr) return -1; + if (adler32(new_ptr, len) != adler) + RET_ERR(EINVAL); if (!copied) bdirect_read_commit(body, end); ptr = new_ptr; diff --git a/lib/buckettool.c b/lib/buckettool.c index 2b4ff592..212508bb 100644 --- a/lib/buckettool.c +++ b/lib/buckettool.c @@ -201,6 +201,11 @@ insert(byte *arg) bputl(b, lizard_filled #if 0 //TEST error resilience: write wrong length +1 +#endif + ); + bputl(b, adler32(lizard_buf.ptr, lizard_filled) +#if 0 //TEST error resilience: write wrong checksum + +1 #endif ); uns want_len = lizard_filled * LIZARD_MAX_MULTIPLY + LIZARD_MAX_ADD; diff --git a/lib/lizard-test.c b/lib/lizard-test.c index ba78e022..73200d19 100644 --- a/lib/lizard-test.c +++ b/lib/lizard-test.c @@ -54,6 +54,7 @@ main(int argc, char **argv) void *mi, *mo; int li, lo; + uns adler = 0; struct stat st; stat(argv[optind], &st); @@ -67,7 +68,8 @@ main(int argc, char **argv) else { lo = bgetl(fi); - li -= 4; + adler = bgetl(fi); + li -= 8; } mi = xmalloc(li); mo = xmalloc(lo); @@ -76,12 +78,16 @@ main(int argc, char **argv) printf("%d ", li); if (action == 'd') - printf("->expected %d ", lo); + printf("->expected %d (%08x) ", lo, adler); fflush(stdout); if (action != 'd') lo = lizard_compress(mi, li, mo); else + { lo = lizard_decompress(mi, mo); + if (adler32(mo, lo) != adler) + printf("wrong Adler32 "); + } printf("-> %d ", lo); fflush(stdout); @@ -89,7 +95,10 @@ main(int argc, char **argv) { struct fastbuf *fo = bopen(argv[optind+1], O_CREAT | O_TRUNC | O_WRONLY, 1<<16); if (action == 'c') + { bputl(fo, li); + bputl(fo, adler32(mi, li)); + } bwrite(fo, mo, lo); bclose(fo); } -- 2.39.2