hivex: Reenable checksum calculations, but don't check result.
authorRichard Jones <rjones@redhat.com>
Fri, 15 Jan 2010 12:41:34 +0000 (12:41 +0000)
committerRichard Jones <rjones@redhat.com>
Fri, 15 Jan 2010 12:41:34 +0000 (12:41 +0000)
hivex/hivex.c

index 36c6b0e..546ef18 100644 (file)
@@ -283,15 +283,16 @@ hivex_open (const char *filename, int flags)
   if (h->bitmap == NULL)
     goto error;
 
   if (h->bitmap == NULL)
     goto error;
 
-#if 0                           /* Doesn't work. */
   /* Header checksum. */
   /* Header checksum. */
-  uint32_t *daddr = h->addr;
+  uint32_t *daddr = (uint32_t *) h->addr;
   size_t i;
   uint32_t sum = 0;
   for (i = 0; i < 0x1fc / 4; ++i) {
   size_t i;
   uint32_t sum = 0;
   for (i = 0; i < 0x1fc / 4; ++i) {
-    sum += le32toh (*daddr);
+    sum ^= le32toh (*daddr);
     daddr++;
   }
     daddr++;
   }
+
+#if 0                           /* Doesn't work. */
   if (sum != le32toh (h->hdr->csum)) {
     fprintf (stderr, "hivex: %s: bad checksum in hive header\n", filename);
     errno = EINVAL;
   if (sum != le32toh (h->hdr->csum)) {
     fprintf (stderr, "hivex: %s: bad checksum in hive header\n", filename);
     errno = EINVAL;