From d6190d2395a3384a29356bba5e437e2fa54b7eba Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Fri, 10 Aug 2012 16:59:06 -0400 Subject: [PATCH] 3.2.2-5: add endianness patch (rhbz#841596; backport of attachment 603634) --- fix-argument-to-array.patch | 104 ++++++++++++++++++++++++++++++++++++ pygobject3.spec | 11 +++- 2 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 fix-argument-to-array.patch diff --git a/fix-argument-to-array.patch b/fix-argument-to-array.patch new file mode 100644 index 0000000..9993b28 --- /dev/null +++ b/fix-argument-to-array.patch @@ -0,0 +1,104 @@ +diff -up pygobject-3.2.2/gi/pygi-argument.c.fix-argument-to-array pygobject-3.2.2/gi/pygi-argument.c +--- pygobject-3.2.2/gi/pygi-argument.c.fix-argument-to-array 2012-08-13 14:04:12.042265495 -0400 ++++ pygobject-3.2.2/gi/pygi-argument.c 2012-08-13 14:05:39.579171131 -0400 +@@ -31,6 +31,44 @@ + #include + #include + ++static gboolean ++gi_argument_to_gssize (GIArgument *arg_in, ++ GITypeTag type_tag, ++ gssize *gssize_out) ++{ ++ switch (type_tag) { ++ case GI_TYPE_TAG_INT8: ++ *gssize_out = arg_in->v_int8; ++ return TRUE; ++ case GI_TYPE_TAG_UINT8: ++ *gssize_out = arg_in->v_uint8; ++ return TRUE; ++ case GI_TYPE_TAG_INT16: ++ *gssize_out = arg_in->v_int16; ++ return TRUE; ++ case GI_TYPE_TAG_UINT16: ++ *gssize_out = arg_in->v_uint16; ++ return TRUE; ++ case GI_TYPE_TAG_INT32: ++ *gssize_out = arg_in->v_int32; ++ return TRUE; ++ case GI_TYPE_TAG_UINT32: ++ *gssize_out = arg_in->v_uint32; ++ return TRUE; ++ case GI_TYPE_TAG_INT64: ++ *gssize_out = arg_in->v_int64; ++ return TRUE; ++ case GI_TYPE_TAG_UINT64: ++ *gssize_out = arg_in->v_uint64; ++ return TRUE; ++ default: ++ PyErr_Format (PyExc_TypeError, ++ "Unable to marshal %s to gssize", ++ g_type_tag_to_string(type_tag)); ++ return FALSE; ++ } ++} ++ + void + _pygi_hash_pointer_to_arg (GIArgument *arg, + GITypeTag type_tag) +@@ -706,6 +744,7 @@ check_number_release: + GArray * + _pygi_argument_to_array (GIArgument *arg, + GIArgument *args[], ++ GICallableInfo *callable_info, + GITypeInfo *type_info, + gboolean is_method) + { +@@ -732,12 +771,20 @@ _pygi_argument_to_array (GIArgument *ar + length = g_type_info_get_array_fixed_size (type_info); + if (length < 0) { + gint length_arg_pos; ++ GIArgInfo *length_arg_info; ++ GITypeInfo *length_type_info; + + length_arg_pos = g_type_info_get_array_length (type_info); + g_assert (length_arg_pos >= 0); + +- /* FIXME: Take into account the type of the argument. */ +- length = args[length_arg_pos]->v_int; ++ g_assert (callable_info); ++ length_arg_info = g_callable_info_get_arg(callable_info, length_arg_pos); ++ length_type_info = g_arg_info_get_type(length_arg_info); ++ if (!gi_argument_to_gssize (args[length_arg_pos], ++ g_type_info_get_tag(length_type_info), ++ &length)) { ++ return NULL; ++ } + } + } + +diff -up pygobject-3.2.2/gi/pygi-argument.h.fix-argument-to-array pygobject-3.2.2/gi/pygi-argument.h +--- pygobject-3.2.2/gi/pygi-argument.h.fix-argument-to-array 2012-08-13 14:04:12.000000000 -0400 ++++ pygobject-3.2.2/gi/pygi-argument.h 2012-08-13 14:05:57.652945179 -0400 +@@ -50,6 +50,7 @@ gint _pygi_g_registered_type_info_check_ + + GArray* _pygi_argument_to_array (GIArgument *arg, + GIArgument *args[], ++ GICallableInfo *callable_info, + GITypeInfo *type_info, + gboolean is_method); + +diff -up pygobject-3.2.2/gi/pygi-closure.c.fix-argument-to-array pygobject-3.2.2/gi/pygi-closure.c +diff -up pygobject-3.2.2/gi/pygi-info.c.fix-argument-to-array pygobject-3.2.2/gi/pygi-info.c +--- pygobject-3.2.2/gi/pygi-info.c.fix-argument-to-array 2012-05-14 12:49:12.000000000 -0400 ++++ pygobject-3.2.2/gi/pygi-info.c 2012-08-13 14:06:37.788443416 -0400 +@@ -1236,7 +1236,7 @@ _wrap_g_field_info_get_value (PyGIBaseIn + + if ( (g_type_info_get_tag (field_type_info) == GI_TYPE_TAG_ARRAY) && + (g_type_info_get_array_type (field_type_info) == GI_ARRAY_TYPE_C)) { +- value.v_pointer = _pygi_argument_to_array (&value, NULL, ++ value.v_pointer = _pygi_argument_to_array (&value, NULL, NULL, + field_type_info, FALSE); + } + +diff -up pygobject-3.2.2/gi/pygi-signal-closure.c.fix-argument-to-array pygobject-3.2.2/gi/pygi-signal-closure.c diff --git a/pygobject3.spec b/pygobject3.spec index 274d868..3ee44dd 100644 --- a/pygobject3.spec +++ b/pygobject3.spec @@ -22,7 +22,7 @@ Name: pygobject3 Version: 3.2.2 -Release: 4%{?dist} +Release: 5%{?dist} License: LGPLv2+ and MIT Group: Development/Languages Summary: Python 2 bindings for GObject Introspection @@ -59,6 +59,10 @@ Patch4: fix-list-marshalling-on-big-endian-machines.patch # Not yet sent upstream: Patch5: test-list-marshalling.patch +# Fix endianness issue in _pygi_argument_to_array (rhbz#841596; +# backport of attachment 603634): +Patch6: fix-argument-to-array.patch + ### Build Dependencies ### @@ -133,6 +137,7 @@ for use in Python 3 programs. %patch3 -p1 -b .endianness-fixes %patch5 -p1 -b .test-list-marshalling +%patch6 -p1 -b .fix-argument-to-array autoreconf @@ -186,6 +191,7 @@ find $RPM_BUILD_ROOT -name '*.a' -delete # File "/builddir/build/BUILD/python3-pygobject3-3.3.4-4.fc19/gi/__init__.py", line 23, in # from ._gi import _API, Repository #ValueError: level must be >= 0 +# Reported upstream as http://bugs.python.org/issue15610 %if 0 pushd %{py3dir} PYTHON=%{__python3} @@ -231,6 +237,9 @@ xvfb-run make DESTDIR=$RPM_BUILD_ROOT check %{verbosity} %endif # with_python3 %changelog +* Mon Aug 13 2012 David Malcolm - 3.2.2-5 +- add endianness patch (rhbz#841596; backport of attachment 603634) + * Mon Aug 13 2012 David Malcolm - 3.2.2-4 - update endianness patch for rhbz#841596 (to attachment 603367)