hivex: Fix for endianess bug.
authorHilko Bengen <bengen@hilluzination.de>
Wed, 11 May 2011 22:04:20 +0000 (00:04 +0200)
committerRichard W.M. Jones <rjones@redhat.com>
Thu, 12 May 2011 09:50:49 +0000 (10:50 +0100)
* Richard W.M. Jones:
> > Both size_t and int are 32 bit values.  An endianess issue, maybe?
> I guess it might be.  We're supposed to be doing le32toh / be32toh
> everywhere as appropriate, but we might be missing one.  The code is
> mainly tested on little endian arches.

Found it.

Now "make check" completes successfully on Sparc and PowerPC.

lib/hivex.c

index 2abd5bd..7715520 100644 (file)
@@ -1062,7 +1062,7 @@ get_values (hive_h *h, hive_node_h node,
 
   size_t i;
   for (i = 0; i < nr_values; ++i) {
-    hive_node_h value = vlist->offset[i];
+    hive_node_h value = le32toh (vlist->offset[i]);
     value += 0x1000;
     if (!IS_VALID_BLOCK (h, value)) {
       if (h->msglvl >= 2)