]> mj.ucw.cz Git - libucw.git/commitdiff
add Adler32 checksum to compressed V33 buckets
authorRobert Spalek <robert@ucw.cz>
Fri, 16 Jul 2004 10:39:04 +0000 (10:39 +0000)
committerRobert Spalek <robert@ucw.cz>
Fri, 16 Jul 2004 10:39:04 +0000 (10:39 +0000)
lib/buck2obj.c
lib/buckettool.c
lib/lizard-test.c

index 57f430f6f74b2cf273aefaac7f68ca4b36b10b68..15aac17474919ac691286b58828edfed16ce7ebe 100644 (file)
@@ -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;
index 2b4ff592f226c47fc93f91f6e4546d64712a63ad..212508bb176a0cd056ac1909dcd844741ad60ca3 100644 (file)
@@ -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;
index ba78e022cadd28ac52d404c31e45a921dab0f302..73200d19dcf9bb4a926335ecca1b87fb67f0d03d 100644 (file)
@@ -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);
   }