Date: Thursday, March 31, 2016 @ 08:43:03 Author: fyan Revision: 263481
upgpkg: python2 2.7.11-3 add a patch for FS#48761 Added: python2/trunk/descr_ref.patch Modified: python2/trunk/PKGBUILD -----------------+ PKGBUILD | 12 ++++++++--- descr_ref.patch | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 3 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2016-03-31 05:20:41 UTC (rev 263480) +++ PKGBUILD 2016-03-31 06:43:03 UTC (rev 263481) @@ -6,7 +6,7 @@ pkgname=python2 pkgver=2.7.11 -pkgrel=2 +pkgrel=3 _pybasever=2.7 pkgdesc="A high-level scripting language" arch=('i686' 'x86_64') @@ -19,8 +19,10 @@ 'python2-setuptools' 'python2-pip') conflicts=('python<3') -source=(http://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz) -sha1sums=('c3b8bbe3f084c4d4ea13ffb03d75a5e22f9756ff') +source=(http://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz + descr_ref.patch) +sha1sums=('c3b8bbe3f084c4d4ea13ffb03d75a5e22f9756ff' + '8cc6ac63e909063eb16bbdabc0f0eac7d24ff0c1') prepare() { cd Python-${pkgver} @@ -55,6 +57,10 @@ # Workaround asdl_c.py/makeopcodetargets.py errors after we touched the shebangs touch Include/Python-ast.h Python/Python-ast.c Python/opcode_targets.h + + # FS#48761 + # http://bugs.python.org/issue25750 + patch -p1 -i ../descr_ref.patch } build() { Added: descr_ref.patch =================================================================== --- descr_ref.patch (rev 0) +++ descr_ref.patch 2016-03-31 06:43:03 UTC (rev 263481) @@ -0,0 +1,58 @@ +When calling tp_descr_get(self, obj, type), make sure that we own a reference to "self" + +diff -ru Python-2.7.9/Objects/typeobject.c Python-2.7.9-fixed//Objects/typeobject.c +--- Python-2.7.9/Objects/typeobject.c 2014-12-10 16:59:57.000000000 +0100 ++++ Python-2.7.9-fixed//Objects/typeobject.c 2015-11-27 20:39:58.276156800 +0100 +@@ -2542,6 +2542,7 @@ + PyTypeObject *metatype = Py_TYPE(type); + PyObject *meta_attribute, *attribute; + descrgetfunc meta_get; ++ PyObject* res; + + if (!PyString_Check(name)) { + PyErr_Format(PyExc_TypeError, +@@ -2563,6 +2564,7 @@ + meta_attribute = _PyType_Lookup(metatype, name); + + if (meta_attribute != NULL) { ++ Py_INCREF(meta_attribute); + meta_get = Py_TYPE(meta_attribute)->tp_descr_get; + + if (meta_get != NULL && PyDescr_IsData(meta_attribute)) { +@@ -2570,10 +2572,11 @@ + * writes. Assume the attribute is not overridden in + * type's tp_dict (and bases): call the descriptor now. + */ +- return meta_get(meta_attribute, (PyObject *)type, ++ res = meta_get(meta_attribute, (PyObject *)type, + (PyObject *)metatype); ++ Py_DECREF(meta_attribute); ++ return res; + } +- Py_INCREF(meta_attribute); + } + + /* No data descriptor found on metatype. Look in tp_dict of this +@@ -2581,6 +2584,7 @@ + attribute = _PyType_Lookup(type, name); + if (attribute != NULL) { + /* Implement descriptor functionality, if any */ ++ Py_INCREF(attribute); + descrgetfunc local_get = Py_TYPE(attribute)->tp_descr_get; + + Py_XDECREF(meta_attribute); +@@ -2588,11 +2592,12 @@ + if (local_get != NULL) { + /* NULL 2nd argument indicates the descriptor was + * found on the target object itself (or a base) */ +- return local_get(attribute, (PyObject *)NULL, ++ res = local_get(attribute, (PyObject *)NULL, + (PyObject *)type); ++ Py_DECREF(attribute); ++ return res; + } + +- Py_INCREF(attribute); + return attribute; + } +