r32433 - in /desktop/unstable/pygobject/debian: changelog patches/00git_gerror_transfer_none.patch patches/series

mpitt at users.alioth.debian.org mpitt at users.alioth.debian.org
Wed Jan 25 06:19:09 UTC 2012


Author: mpitt
Date: Wed Jan 25 06:19:08 2012
New Revision: 32433

URL: http://svn.debian.org/wsvn/pkg-gnome/?sc=1&rev=32433
Log:
Add 00git_gerror_transfer_none.patch: Respect transfer-type when
demarshalling GErrors. The marshaller previously ignored "transfer full"
on GError* arguments, causing crashes due to double-freeing them.
Backported from upstream git head.

Added:
    desktop/unstable/pygobject/debian/patches/00git_gerror_transfer_none.patch
Modified:
    desktop/unstable/pygobject/debian/changelog
    desktop/unstable/pygobject/debian/patches/series

Modified: desktop/unstable/pygobject/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/pygobject/debian/changelog?rev=32433&op=diff
==============================================================================
--- desktop/unstable/pygobject/debian/changelog [utf-8] (original)
+++ desktop/unstable/pygobject/debian/changelog [utf-8] Wed Jan 25 06:19:08 2012
@@ -6,6 +6,10 @@
     GError as callback/closure arguments. Backported from upstream git head,
     but without the test cases, as they require an addition to
     gobject-introspection. (LP: #904783)
+  * Add 00git_gerror_transfer_none.patch: Respect transfer-type when
+    demarshalling GErrors. The marshaller previously ignored "transfer full"
+    on GError* arguments, causing crashes due to double-freeing them.
+    Backported from upstream git head.
 
  -- Martin Pitt <mpitt at debian.org>  Fri, 06 Jan 2012 20:05:07 +0100
 

Added: desktop/unstable/pygobject/debian/patches/00git_gerror_transfer_none.patch
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/pygobject/debian/patches/00git_gerror_transfer_none.patch?rev=32433&op=file
==============================================================================
--- desktop/unstable/pygobject/debian/patches/00git_gerror_transfer_none.patch (added)
+++ desktop/unstable/pygobject/debian/patches/00git_gerror_transfer_none.patch [utf-8] Wed Jan 25 06:19:08 2012
@@ -1,0 +1,61 @@
+From d69e5b3c7bdb9113382fd125c256b12bff4c24d2 Mon Sep 17 00:00:00 2001
+From: Alberto Mardegan <mardy at users.sourceforge.net>
+Date: Mon, 23 Jan 2012 12:37:26 +0200
+Subject: Respect transfer-type when demarshalling GErrors
+
+The marshaller previously ignored "transfer full" on GError* arguments, causing
+crashes due to double-freeing them. This causes the testCallbackUserdata() test
+case to crash after the previous GError/GHashTable marshalling fix.
+
+Bug: https://bugzilla.gnome.org/show_bug.cgi?id=666270
+---
+ gi/pygi-argument.c |   12 +++++++++++-
+ 1 files changed, 11 insertions(+), 1 deletions(-)
+
+Index: pygobject/gi/pygi-argument.c
+===================================================================
+--- pygobject.orig/gi/pygi-argument.c	2011-11-02 14:13:28.000000000 +0100
++++ pygobject/gi/pygi-argument.c	2012-01-25 07:17:11.810839994 +0100
+@@ -1785,19 +1785,29 @@
+             break;
+         }
+         case GI_TYPE_TAG_ERROR:
+-             if (pyglib_error_check ( (GError **) &arg->v_pointer)) {
+-                 PyObject *err_type;
+-                 PyObject *err_value;
+-                 PyObject *err_trace;
+-                 PyErr_Fetch (&err_type, &err_value, &err_trace);
+-                 Py_XDECREF (err_type);
+-                 Py_XDECREF (err_trace);
+-                 object = err_value;
+-             } else {
+-                 object = Py_None;
+-                 Py_INCREF (object);
+-                 break;
+-             }
++        {
++            GError *error = (GError *) arg->v_pointer;
++            if (error != NULL && transfer == GI_TRANSFER_NOTHING) {
++                /* If we have not been transferred the ownership we must copy
++                 * the error, because pyglib_error_check() is going to free it.
++                 */
++                error = g_error_copy (error);
++            }
++
++            if (pyglib_error_check (&error)) {
++                PyObject *err_type;
++                PyObject *err_value;
++                PyObject *err_trace;
++                PyErr_Fetch (&err_type, &err_value, &err_trace);
++                Py_XDECREF (err_type);
++                Py_XDECREF (err_trace);
++                object = err_value;
++            } else {
++                object = Py_None;
++                Py_INCREF (object);
++                break;
++            }
++        }
+     }
+ 
+     return object;

Modified: desktop/unstable/pygobject/debian/patches/series
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/pygobject/debian/patches/series?rev=32433&op=diff
==============================================================================
--- desktop/unstable/pygobject/debian/patches/series [utf-8] (original)
+++ desktop/unstable/pygobject/debian/patches/series [utf-8] Wed Jan 25 06:19:08 2012
@@ -1,2 +1,3 @@
 00git_ghashtable_gerror_callback_args.patch
+00git_gerror_transfer_none.patch
 01_revert_tree_model_unicode_conversion.patch




More information about the pkg-gnome-commits mailing list