hivex/python fix for i386 integer size issue
authorHilko Bengen <bengen@hilluzination.de>
Wed, 27 Apr 2011 22:20:08 +0000 (00:20 +0200)
committerRichard W.M. Jones <rjones@redhat.com>
Thu, 28 Apr 2011 08:38:04 +0000 (09:38 +0100)
Hi,

While working on Debian packages of hivex 1.2.5, I came across a test
failure for the Python bindings with Python 2.7 on the i386
architecture. (The tests ran fine on amd64.)

,----
| $ make -C python check
| make[1]: Entering directory `/home/bengen/src/deb/hivex/hivex.git/python'
| 010-import.py
| 020-open.py
| 021-close.py
| 200-write.py
| python: hivex-py.c:52: get_handle: Assertion `obj' failed.
`----

I narrowed this down to hivex-py.c:py_hivex_node_add_child():

The call

,----
| PyArg_ParseTuple (args, (char *) "OLs:hivex_node_add_child",
|                         &py_h, &parent, &name)
`----

results in `py_h' set to NULL, though Python's documentation claims that
this cannot happen. I think this happens because `parent' is declared a
`long int', but "L" in the format string corresponds to a `long long'.
On amd64, they have the same size, but on i386 they don't, so the
PyObject pointer is written to the wrong address.

Please consider applying the patch below which just changes the format
string. After regenerating hivex-py.c, I have successfully tested the
1.2.5 code base on both architectures.

Cheers,
-Hilko

generator/generator.ml

index 7e706d1..9722312 100755 (executable)
@@ -2875,7 +2875,7 @@ put_val_type (char *val, size_t len, hive_type t)
            pr "O"
        | ANode n
        | AValue n ->
-           pr "L"
+           pr "l"
        | AString n ->
            pr "s"
         | AStringNullable n ->