diff options
author | Christian Persch <chpe@gnome.org> | 2012-04-09 15:34:10 +0200 |
---|---|---|
committer | Christian Persch <chpe@gnome.org> | 2012-04-16 22:39:34 +0200 |
commit | 5ef34e5f11b4f71a66615b6506108ee540cc3420 (patch) | |
tree | 8851941b9618e081dfdef2f584c6f9af35686665 /gio/gresource.c | |
parent | cf619cffb77b6792f344b517bb4fc46afe0690f5 (diff) | |
download | glib-5ef34e5f11b4f71a66615b6506108ee540cc3420.tar.gz |
resources: compiler: Fix resources on big endian architectures
Resources are always little endian, so the gvdb is byteswapped. When looking
up the value, it would return a new byteswapped variant, making the data
returned from do_lookup() invalid once that variant is unref'd. Since
byteswapping doesn't matter for the "ay" data anyway, just use
gvdb_table_get_raw_value() instead and only byteswap the length and flag
values.
https://bugzilla.gnome.org/show_bug.cgi?id=673409
Diffstat (limited to 'gio/gresource.c')
-rw-r--r-- | gio/gresource.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gio/gresource.c b/gio/gresource.c index 77ae6ebec..559d916d4 100644 --- a/gio/gresource.c +++ b/gio/gresource.c @@ -287,7 +287,7 @@ gboolean do_lookup (GResource *resource, free_path[path_len-1] = 0; } - value = gvdb_table_get_value (resource->table, path); + value = gvdb_table_get_raw_value (resource->table, path); if (value == NULL) { @@ -305,6 +305,9 @@ gboolean do_lookup (GResource *resource, &_flags, &array); + _size = GUINT32_FROM_LE (_size); + _flags = GUINT32_FROM_LE (_flags); + if (size) *size = _size; if (flags) |