Hilko Bengen
2014-Feb-03 19:11 UTC
[Libguestfs] [PATCH] hivex: python: value_value no longer generates Unicode strings
This fixes Github issue #2 reported by "kupiakos". <https://github.com/libguestfs/hivex/issues/2> --- generator/generator.ml | 2 +- python/t/210-setvalue.py | 26 +++++++++++++++++--------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/generator/generator.ml b/generator/generator.ml index 908c5f3..02aaf12 100755 --- a/generator/generator.ml +++ b/generator/generator.ml @@ -2981,7 +2981,7 @@ put_val_type (char *val, size_t len, hive_type t) { PyObject *r = PyTuple_New (2); PyTuple_SetItem (r, 0, PyLong_FromLong ((long) t)); - PyTuple_SetItem (r, 1, PyUnicode_DecodeUTF8 (val, len, NULL)); + PyTuple_SetItem (r, 1, PyBytes_FromStringAndSize (val, len)); return r; } diff --git a/python/t/210-setvalue.py b/python/t/210-setvalue.py index 2ee7ac5..8e7ed5c 100644 --- a/python/t/210-setvalue.py +++ b/python/t/210-setvalue.py @@ -19,6 +19,14 @@ import sys import os import hivex +if sys.version >= '3': + import codecs + def b(x): + return codecs.encode(x) +else: + def b(x): + return x + srcdir = os.environ["srcdir"] if not srcdir: srcdir = "." @@ -32,27 +40,27 @@ assert root h.node_add_child (root, "B") -b = h.node_get_child (root, "B") -assert b +B = h.node_get_child (root, "B") +assert B values = [ { "key": "Key1", "t": 3, "value": "ABC" }, { "key": "Key2", "t": 3, "value": "DEF" } ] -h.node_set_values (b, values) +h.node_set_values (B, values) value1 = { "key": "Key3", "t": 3, "value": "GHI" } -h.node_set_value (b, value1) +h.node_set_value (B, value1) value1 = { "key": "Key1", "t": 3, "value": "JKL" } -h.node_set_value (b, value1) +h.node_set_value (B, value1) -val = h.node_get_value (b, "Key1") +val = h.node_get_value (B, "Key1") t_data = h.value_value (val) assert t_data[0] == 3 -assert t_data[1] == "JKL" +assert t_data[1] == b("JKL") -val = h.node_get_value (b, "Key3") +val = h.node_get_value (B, "Key3") t_data = h.value_value (val) assert t_data[0] == 3 -assert t_data[1] == "GHI" +assert t_data[1] == b("GHI") -- 1.9.rc1
Richard W.M. Jones
2014-Feb-03 20:04 UTC
Re: [Libguestfs] [PATCH] hivex: python: value_value no longer generates Unicode strings
On Mon, Feb 03, 2014 at 08:11:35PM +0100, Hilko Bengen wrote:> This fixes Github issue #2 reported by "kupiakos". > > <https://github.com/libguestfs/hivex/issues/2>Thanks for fixing this. To the reporter: It's the first time I've seen this bug report. Github doesn't seem to generate any message when an issue is filed (or if it does, it went to a spam folder somewhere) and you should use https://bugzilla.redhat.com for bug reports for hivex/libguestfs.> generator/generator.ml | 2 +- > python/t/210-setvalue.py | 26 +++++++++++++++++--------- > 2 files changed, 18 insertions(+), 10 deletions(-) > > diff --git a/generator/generator.ml b/generator/generator.ml > index 908c5f3..02aaf12 100755 > --- a/generator/generator.ml > +++ b/generator/generator.ml > @@ -2981,7 +2981,7 @@ put_val_type (char *val, size_t len, hive_type t) > { > PyObject *r = PyTuple_New (2); > PyTuple_SetItem (r, 0, PyLong_FromLong ((long) t)); > - PyTuple_SetItem (r, 1, PyUnicode_DecodeUTF8 (val, len, NULL)); > + PyTuple_SetItem (r, 1, PyBytes_FromStringAndSize (val, len)); > return r; > } > > diff --git a/python/t/210-setvalue.py b/python/t/210-setvalue.py > index 2ee7ac5..8e7ed5c 100644 > --- a/python/t/210-setvalue.py > +++ b/python/t/210-setvalue.py > @@ -19,6 +19,14 @@ import sys > import os > import hivex > > +if sys.version >= '3': > + import codecs > + def b(x): > + return codecs.encode(x) > +else: > + def b(x): > + return x > + > srcdir = os.environ["srcdir"] > if not srcdir: > srcdir = "." > @@ -32,27 +40,27 @@ assert root > > h.node_add_child (root, "B") > > -b = h.node_get_child (root, "B") > -assert b > +B = h.node_get_child (root, "B") > +assert B > > values = [ > { "key": "Key1", "t": 3, "value": "ABC" }, > { "key": "Key2", "t": 3, "value": "DEF" } > ] > -h.node_set_values (b, values) > +h.node_set_values (B, values) > > value1 = { "key": "Key3", "t": 3, "value": "GHI" } > -h.node_set_value (b, value1) > +h.node_set_value (B, value1) > > value1 = { "key": "Key1", "t": 3, "value": "JKL" } > -h.node_set_value (b, value1) > +h.node_set_value (B, value1) > > -val = h.node_get_value (b, "Key1") > +val = h.node_get_value (B, "Key1") > t_data = h.value_value (val) > assert t_data[0] == 3 > -assert t_data[1] == "JKL" > +assert t_data[1] == b("JKL") > > -val = h.node_get_value (b, "Key3") > +val = h.node_get_value (B, "Key3") > t_data = h.value_value (val) > assert t_data[0] == 3 > -assert t_data[1] == "GHI" > +assert t_data[1] == b("GHI")ACK. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones virt-df lists disk usage of guests without needing to install any software inside the virtual machine. Supports Linux and Windows. http://people.redhat.com/~rjones/virt-df/
Reasonably Related Threads
- [PATCH 1/4] hivex: Python 2.6 does not have sysconfig.
- [PATCH 4/4] hivex: python: Get rid of to_string function in test script
- [hivex] [PATCH 0/6] Python fixes for node_set_value
- [hivex PATCH] ruby: improve test functions
- Hivex3: Saving values - always string