From 50232369f6457c004e0390c1d3a18b826a96c9a9 Mon Sep 17 00:00:00 2001 From: Bohuslav Kabrda Date: Wed, 10 Apr 2013 14:30:09 +0200 Subject: [PATCH 1/7] Updated to Python 3.3.1. - Refreshed patches: 55 (systemtap), 111 (no static lib), 146 (hashlib fips), 153 (fix test_gdb noise), 157 (uid, gid overflow - fixed upstream, just keeping few more downstream tests) - Removed patches: 3 (audiotest.au made it to upstream tarball) - Removed workaround for http://bugs.python.org/issue14774, discussed in http://bugs.python.org/issue15298 and fixed in revision 24d52d3060e8. --- 00055-systemtap.patch | 6 +- 00111-no-static-lib.patch | 4 +- 00146-hashlib-fips.patch | 17 +- 00153-fix-test_gdb-noise.patch | 7 +- 00157-uid-gid-overflows.patch | 638 +----------------- 00178-dont-duplicate-flags-in-sysconfig.patch | 30 + 05000-autotool-intermediates.patch | 24 +- python3.spec | 60 +- sources | 2 +- 9 files changed, 98 insertions(+), 690 deletions(-) create mode 100644 00178-dont-duplicate-flags-in-sysconfig.patch diff --git a/00055-systemtap.patch b/00055-systemtap.patch index 577538a..90b876b 100644 --- a/00055-systemtap.patch +++ b/00055-systemtap.patch @@ -653,8 +653,8 @@ diff -up Python-3.3.0rc2/Makefile.pre.in.systemtap Python-3.3.0rc2/Makefile.pre. Python/formatter_unicode.o: $(srcdir)/Python/formatter_unicode.c \ $(BYTESTR_DEPS) @@ -724,6 +726,13 @@ Objects/typeobject.o: $(srcdir)/Objects/ - $(srcdir)/Objects/typeslots.inc: $(srcdir)/Include/typeslots.h $(srcdir)/Objects/typeslots.py - $(PYTHON) $(srcdir)/Objects/typeslots.py < $(srcdir)/Include/typeslots.h > $(srcdir)/Objects/typeslots.inc + Objects/typeslots.inc: $(srcdir)/Include/typeslots.h $(srcdir)/Objects/typeslots.py + $(PYTHON) $(srcdir)/Objects/typeslots.py < $(srcdir)/Include/typeslots.h > Objects/typeslots.inc +# Only needed with --with-systemtap; not a public header: +$(srcdir)/Python/pysystemtap.h: $(srcdir)/Python/pysystemtap.d @@ -667,8 +667,8 @@ diff -up Python-3.3.0rc2/Makefile.pre.in.systemtap Python-3.3.0rc2/Makefile.pre. # Header files @@ -1345,6 +1354,7 @@ clean: pycremoval + -rm -f pybuilddir.txt -rm -f Lib/lib2to3/*Grammar*.pickle - -rm -f $(SYSCONFIGDATA) -rm -f Modules/_testembed Modules/_freeze_importlib + -rm -f $(srcdir)/Python/pysystemtap.h diff --git a/00111-no-static-lib.patch b/00111-no-static-lib.patch index 91b24b8..bd63852 100644 --- a/00111-no-static-lib.patch +++ b/00111-no-static-lib.patch @@ -9,7 +9,7 @@ diff -up cpython-59223da36dec/Makefile.pre.in.no-static-lib cpython-59223da36dec +$(BUILDPYTHON): Modules/python.o $(LDLIBRARY) $(PY3LIBRARY) $(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Modules/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) - platform: $(BUILDPYTHON) $(SYSCONFIGDATA) + platform: $(BUILDPYTHON) pybuilddir.txt @@ -480,18 +480,6 @@ sharedmods: $(BUILDPYTHON) $(SYSCONFIGDA $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \ $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build @@ -44,7 +44,7 @@ diff -up cpython-59223da36dec/Makefile.pre.in.no-static-lib cpython-59223da36dec done - @if test -d $(LIBRARY); then :; else \ - if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \ -- if test "$(SO)" = .dll; then \ +- if test "$(SHLIB_SUFFIX)" = .dll; then \ - $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \ - else \ - $(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \ diff --git a/00146-hashlib-fips.patch b/00146-hashlib-fips.patch index da83205..f22d9bd 100644 --- a/00146-hashlib-fips.patch +++ b/00146-hashlib-fips.patch @@ -285,7 +285,7 @@ diff -up Python-3.2.2/Modules/_hashopenssl.c.hashlib-fips Python-3.2.2/Modules/_ +} EVPCachedInfo; -#define DEFINE_CONSTS_FOR_NEW(Name) \ -- static PyObject *CONST_ ## Name ## _name_obj; \ +- static PyObject *CONST_ ## Name ## _name_obj = NULL; \ - static EVP_MD_CTX CONST_new_ ## Name ## _ctx; \ - static EVP_MD_CTX *CONST_new_ ## Name ## _ctx_p = NULL; +#define DEFINE_CONSTS_FOR_NEW(Name) \ @@ -444,7 +444,7 @@ diff -up Python-3.2.2/Modules/_hashopenssl.c.hashlib-fips Python-3.2.2/Modules/_ if (data_obj) PyBuffer_Release(&view); -@@ -547,55 +620,115 @@ generate_hash_name_list(void) +@@ -547,58 +620,115 @@ generate_hash_name_list(void) /* @@ -550,12 +550,15 @@ diff -up Python-3.2.2/Modules/_hashopenssl.c.hashlib-fips Python-3.2.2/Modules/_ " hash object; optionally initialized with a string") \ } --/* used in the init function to setup a constructor */ +-/* used in the init function to setup a constructor: initialize OpenSSL +- constructor constants if they haven't been initialized already. */ -#define INIT_CONSTRUCTOR_CONSTANTS(NAME) do { \ -- CONST_ ## NAME ## _name_obj = PyUnicode_FromString(#NAME); \ -- if (EVP_get_digestbyname(#NAME)) { \ -- CONST_new_ ## NAME ## _ctx_p = &CONST_new_ ## NAME ## _ctx; \ -- EVP_DigestInit(CONST_new_ ## NAME ## _ctx_p, EVP_get_digestbyname(#NAME)); \ +- if (CONST_ ## NAME ## _name_obj == NULL) { \ +- CONST_ ## NAME ## _name_obj = PyUnicode_FromString(#NAME); \ +- if (EVP_get_digestbyname(#NAME)) { \ +- CONST_new_ ## NAME ## _ctx_p = &CONST_new_ ## NAME ## _ctx; \ +- EVP_DigestInit(CONST_new_ ## NAME ## _ctx_p, EVP_get_digestbyname(#NAME)); \ +- } \ - } \ -} while (0); +/* diff --git a/00153-fix-test_gdb-noise.patch b/00153-fix-test_gdb-noise.patch index cc9ed8c..c65787f 100644 --- a/00153-fix-test_gdb-noise.patch +++ b/00153-fix-test_gdb-noise.patch @@ -18,10 +18,9 @@ diff -up cpython-59223da36dec/Lib/test/test_gdb.py.fix-test_gdb-noise cpython-59 if cmds_after_breakpoint: commands += cmds_after_breakpoint @@ -154,8 +163,16 @@ class DebuggerTests(unittest.TestCase): - err = err.replace("warning: Cannot initialize thread debugging" - " library: Debugger service failed\n", + 'Do you need "set solib-search-path" or ' + '"set sysroot"?\n', '') -- + err = '\n'.join([line + for line in err.splitlines() + if not line.startswith('warning: Unable to open') @@ -29,7 +28,7 @@ diff -up cpython-59223da36dec/Lib/test/test_gdb.py.fix-test_gdb-noise cpython-59 + if not line.startswith('Try: yum --disablerepo=') + # In case 'set print entry-values no' failed: + if not line.startswith('Undefined set print command')]) -+ + # Ensure no unexpected error messages: + self.maxDiff = None self.assertEqual(err, '') diff --git a/00157-uid-gid-overflows.patch b/00157-uid-gid-overflows.patch index ab4cb0c..0f48df5 100644 --- a/00157-uid-gid-overflows.patch +++ b/00157-uid-gid-overflows.patch @@ -1,32 +1,3 @@ -diff -up Python-3.3.0b1/Include/modsupport.h.uid-gid-overflows Python-3.3.0b1/Include/modsupport.h ---- Python-3.3.0b1/Include/modsupport.h.uid-gid-overflows 2012-06-26 16:19:40.000000000 -0400 -+++ Python-3.3.0b1/Include/modsupport.h 2012-07-20 14:21:46.854688763 -0400 -@@ -8,6 +8,7 @@ extern "C" { - /* Module support interface */ - - #include -+#include - - /* If PY_SSIZE_T_CLEAN is defined, each functions treats #-specifier - to mean Py_ssize_t */ -@@ -125,6 +126,17 @@ PyAPI_FUNC(PyObject *) PyModule_Create2( - PyAPI_DATA(char *) _Py_PackageContext; - #endif - -+/* -+ Non-standard extension: support for dealing with uid_t and gid_t without -+ integer overflow -+ */ -+ -+PyAPI_FUNC(PyObject *) _PyObject_FromUid(uid_t uid); -+PyAPI_FUNC(PyObject *) _PyObject_FromGid(gid_t gid); -+ -+PyAPI_FUNC(int) _PyArg_ParseUid(PyObject *in_obj, uid_t *out_uid); -+PyAPI_FUNC(int) _PyArg_ParseGid(PyObject *in_obj, gid_t *out_gid); -+ - #ifdef __cplusplus - } - #endif diff -up Python-3.3.0b1/Lib/test/test_os.py.uid-gid-overflows Python-3.3.0b1/Lib/test/test_os.py --- Python-3.3.0b1/Lib/test/test_os.py.uid-gid-overflows 2012-06-26 16:19:48.000000000 -0400 +++ Python-3.3.0b1/Lib/test/test_os.py 2012-07-20 14:21:46.856688739 -0400 @@ -39,7 +10,7 @@ diff -up Python-3.3.0b1/Lib/test/test_os.py.uid-gid-overflows Python-3.3.0b1/Lib if hasattr(os, 'setgid'): def test_setgid(self): - if os.getuid() != 0: + if os.getuid() != 0 and not HAVE_WHEEL_GROUP: self.assertRaises(os.error, os.setgid, 0) + self.assertRaises(TypeError, os.setgid, 'not an int') self.assertRaises(OverflowError, os.setgid, 1<<32) @@ -53,7 +24,7 @@ diff -up Python-3.3.0b1/Lib/test/test_os.py.uid-gid-overflows Python-3.3.0b1/Lib if hasattr(os, 'setegid'): def test_setegid(self): - if os.getuid() != 0: + if os.getuid() != 0 and not HAVE_WHEEL_GROUP: self.assertRaises(os.error, os.setegid, 0) + self.assertRaises(TypeError, os.setegid, 'not an int') self.assertRaises(OverflowError, os.setegid, 1<<32) @@ -69,62 +40,13 @@ diff -up Python-3.3.0b1/Lib/test/test_os.py.uid-gid-overflows Python-3.3.0b1/Lib @@ -1212,6 +1218,8 @@ if sys.platform != 'win32': def test_setregid(self): - if os.getuid() != 0: + if os.getuid() != 0 and not HAVE_WHEEL_GROUP: self.assertRaises(os.error, os.setregid, 0, 0) + self.assertRaises(TypeError, os.setregid, 'not an int', 0) + self.assertRaises(TypeError, os.setregid, 0, 'not an int') self.assertRaises(OverflowError, os.setregid, 1<<32, 0) self.assertRaises(OverflowError, os.setregid, 0, 1<<32) -diff -up Python-3.3.0b1/Lib/test/test_posix.py.uid-gid-overflows Python-3.3.0b1/Lib/test/test_posix.py ---- Python-3.3.0b1/Lib/test/test_posix.py.uid-gid-overflows 2012-06-26 16:19:48.000000000 -0400 -+++ Python-3.3.0b1/Lib/test/test_posix.py 2012-07-20 14:21:46.857688726 -0400 -@@ -387,10 +387,17 @@ class PosixTester(unittest.TestCase): - else: - self.assertTrue(stat.S_ISFIFO(posix.stat(support.TESTFN).st_mode)) - -- def _test_all_chown_common(self, chown_func, first_param): -+ def _test_all_chown_common(self, chown_func, stat_func, first_param): - """Common code for chown, fchown and lchown tests.""" - # test a successful chown call - chown_func(first_param, os.getuid(), os.getgid()) -+ self.assertEqual(stat_func(first_param).st_uid, os.getuid()) -+ self.assertEqual(stat_func(first_param).st_gid, os.getgid()) -+ -+ # verify that -1 works as a "do-nothing" option: -+ chown_func(first_param, -1, -1) -+ self.assertEqual(stat_func(first_param).st_uid, os.getuid()) -+ self.assertEqual(stat_func(first_param).st_gid, os.getgid()) - - if os.getuid() == 0: - try: -@@ -421,7 +428,7 @@ class PosixTester(unittest.TestCase): - - # re-create the file - support.create_empty_file(support.TESTFN) -- self._test_all_chown_common(posix.chown, support.TESTFN) -+ self._test_all_chown_common(posix.chown, posix.stat, support.TESTFN) - - @unittest.skipUnless(hasattr(posix, 'fchown'), "test needs os.fchown()") - def test_fchown(self): -@@ -431,7 +438,7 @@ class PosixTester(unittest.TestCase): - test_file = open(support.TESTFN, 'w') - try: - fd = test_file.fileno() -- self._test_all_chown_common(posix.fchown, fd) -+ self._test_all_chown_common(posix.fchown, posix.fstat, fd) - finally: - test_file.close() - -@@ -440,7 +447,7 @@ class PosixTester(unittest.TestCase): - os.unlink(support.TESTFN) - # create a symlink - os.symlink(_DUMMY_SYMLINK, support.TESTFN) -- self._test_all_chown_common(posix.lchown, support.TESTFN) -+ self._test_all_chown_common(posix.lchown, posix.lstat, support.TESTFN) - - def test_chdir(self): - if hasattr(posix, 'chdir'): diff -up Python-3.3.0b1/Lib/test/test_pwd.py.uid-gid-overflows Python-3.3.0b1/Lib/test/test_pwd.py --- Python-3.3.0b1/Lib/test/test_pwd.py.uid-gid-overflows 2012-06-26 16:19:48.000000000 -0400 +++ Python-3.3.0b1/Lib/test/test_pwd.py 2012-07-20 14:21:46.857688726 -0400 @@ -140,557 +62,3 @@ diff -up Python-3.3.0b1/Lib/test/test_pwd.py.uid-gid-overflows Python-3.3.0b1/Li self.assertNotIn(fakeuid, byuids) self.assertRaises(KeyError, pwd.getpwuid, fakeuid) -diff -up Python-3.3.0b1/Modules/grpmodule.c.uid-gid-overflows Python-3.3.0b1/Modules/grpmodule.c ---- Python-3.3.0b1/Modules/grpmodule.c.uid-gid-overflows 2012-06-26 16:19:54.000000000 -0400 -+++ Python-3.3.0b1/Modules/grpmodule.c 2012-07-20 14:21:46.858688713 -0400 -@@ -69,7 +69,7 @@ mkgrent(struct group *p) - Py_INCREF(Py_None); - } - #endif -- SET(setIndex++, PyLong_FromLong((long) p->gr_gid)); -+ SET(setIndex++, _PyObject_FromGid(p->gr_gid)); - SET(setIndex++, w); - #undef SET - -@@ -84,18 +84,16 @@ mkgrent(struct group *p) - static PyObject * - grp_getgrgid(PyObject *self, PyObject *pyo_id) - { -- PyObject *py_int_id; -- unsigned int gid; -+ gid_t gid; - struct group *p; - -- py_int_id = PyNumber_Long(pyo_id); -- if (!py_int_id) -- return NULL; -- gid = PyLong_AS_LONG(py_int_id); -- Py_DECREF(py_int_id); -+ if (!_PyArg_ParseGid(pyo_id, &gid)) { -+ return NULL; -+ } - - if ((p = getgrgid(gid)) == NULL) { -- PyErr_Format(PyExc_KeyError, "getgrgid(): gid not found: %d", gid); -+ PyErr_Format(PyExc_KeyError, -+ "getgrgid(): gid not found: %lu", (unsigned long)gid); - return NULL; - } - return mkgrent(p); -diff -up Python-3.3.0b1/Modules/posixmodule.c.uid-gid-overflows Python-3.3.0b1/Modules/posixmodule.c ---- Python-3.3.0b1/Modules/posixmodule.c.uid-gid-overflows 2012-07-20 14:21:46.788689588 -0400 -+++ Python-3.3.0b1/Modules/posixmodule.c 2012-07-20 14:24:19.626778849 -0400 -@@ -2151,8 +2151,8 @@ _pystat_fromstructstat(STRUCT_STAT *st) - PyStructSequence_SET_ITEM(v, 2, PyLong_FromLong((long)st->st_dev)); - #endif - PyStructSequence_SET_ITEM(v, 3, PyLong_FromLong((long)st->st_nlink)); -- PyStructSequence_SET_ITEM(v, 4, PyLong_FromLong((long)st->st_uid)); -- PyStructSequence_SET_ITEM(v, 5, PyLong_FromLong((long)st->st_gid)); -+ PyStructSequence_SET_ITEM(v, 4, _PyObject_FromUid(st->st_uid)); -+ PyStructSequence_SET_ITEM(v, 5, _PyObject_FromGid(st->st_gid)); - #ifdef HAVE_LARGEFILE_SUPPORT - PyStructSequence_SET_ITEM(v, 6, - PyLong_FromLongLong((PY_LONG_LONG)st->st_size)); -@@ -2957,7 +2957,6 @@ static PyObject * - posix_chown(PyObject *self, PyObject *args, PyObject *kwargs) - { - path_t path; -- long uid_l, gid_l; - uid_t uid; - gid_t gid; - int dir_fd = DEFAULT_DIR_FD; -@@ -2971,9 +2970,10 @@ posix_chown(PyObject *self, PyObject *ar - #ifdef HAVE_FCHOWN - path.allow_fd = 1; - #endif -- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&ll|$O&p:chown", keywords, -+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O&O&|$O&p:chown", keywords, - path_converter, &path, -- &uid_l, &gid_l, -+ _PyArg_ParseUid, &uid, -+ _PyArg_ParseGid, &gid, - #ifdef HAVE_FCHOWNAT - dir_fd_converter, &dir_fd, - #else -@@ -3004,8 +3004,6 @@ posix_chown(PyObject *self, PyObject *ar - #endif - - Py_BEGIN_ALLOW_THREADS -- uid = (uid_t)uid_l; -- gid = (uid_t)gid_l; - #ifdef HAVE_FCHOWN - if (path.fd != -1) - result = fchown(path.fd, uid, gid); -@@ -3049,12 +3047,15 @@ static PyObject * - posix_fchown(PyObject *self, PyObject *args) - { - int fd; -- long uid, gid; -+ uid_t uid; -+ gid_t gid; - int res; -- if (!PyArg_ParseTuple(args, "ill:fchown", &fd, &uid, &gid)) -+ if (!PyArg_ParseTuple(args, "iO&O&:chown", &fd, -+ _PyArg_ParseUid, &uid, -+ _PyArg_ParseGid, &gid)) - return NULL; - Py_BEGIN_ALLOW_THREADS -- res = fchown(fd, (uid_t) uid, (gid_t) gid); -+ res = fchown(fd, uid, gid); - Py_END_ALLOW_THREADS - if (res < 0) - return posix_error(); -@@ -3074,15 +3075,17 @@ posix_lchown(PyObject *self, PyObject *a - { - PyObject *opath; - char *path; -- long uid, gid; -+ uid_t uid; -+ gid_t gid; - int res; -- if (!PyArg_ParseTuple(args, "O&ll:lchown", -+ if (!PyArg_ParseTuple(args, "O&O&O&:lchown", - PyUnicode_FSConverter, &opath, -- &uid, &gid)) -+ _PyArg_ParseUid, &uid, -+ _PyArg_ParseGid, &gid)) - return NULL; - path = PyBytes_AsString(opath); - Py_BEGIN_ALLOW_THREADS -- res = lchown(path, (uid_t) uid, (gid_t) gid); -+ res = lchown(path, uid, gid); - Py_END_ALLOW_THREADS - if (res < 0) - return posix_error_with_allocated_filename(opath); -@@ -6184,7 +6187,7 @@ Return the current process's effective g - static PyObject * - posix_getegid(PyObject *self, PyObject *noargs) - { -- return PyLong_FromLong((long)getegid()); -+ return _PyObject_FromGid(getegid()); - } - #endif - -@@ -6197,7 +6200,7 @@ Return the current process's effective u - static PyObject * - posix_geteuid(PyObject *self, PyObject *noargs) - { -- return PyLong_FromLong((long)geteuid()); -+ return _PyObject_FromUid(geteuid()); - } - #endif - -@@ -6210,7 +6213,7 @@ Return the current process's group id.") - static PyObject * - posix_getgid(PyObject *self, PyObject *noargs) - { -- return PyLong_FromLong((long)getgid()); -+ return _PyObject_FromGid(getgid()); - } - #endif - -@@ -6349,7 +6352,7 @@ posix_getgroups(PyObject *self, PyObject - if (result != NULL) { - int i; - for (i = 0; i < n; ++i) { -- PyObject *o = PyLong_FromLong((long)alt_grouplist[i]); -+ PyObject *o = _PyObject_FromGid(alt_grouplist[i]); - if (o == NULL) { - Py_DECREF(result); - result = NULL; -@@ -6380,14 +6383,15 @@ posix_initgroups(PyObject *self, PyObjec - PyObject *oname; - char *username; - int res; -- long gid; -+ gid_t gid; - -- if (!PyArg_ParseTuple(args, "O&l:initgroups", -- PyUnicode_FSConverter, &oname, &gid)) -+ if (!PyArg_ParseTuple(args, "O&O&:initgroups", -+ PyUnicode_FSConverter, &oname, -+ _PyArg_ParseGid, &gid)) - return NULL; - username = PyBytes_AS_STRING(oname); - -- res = initgroups(username, (gid_t) gid); -+ res = initgroups(username, gid); - Py_DECREF(oname); - if (res == -1) - return PyErr_SetFromErrno(PyExc_OSError); -@@ -6562,7 +6566,7 @@ Return the current process's user id."); - static PyObject * - posix_getuid(PyObject *self, PyObject *noargs) - { -- return PyLong_FromLong((long)getuid()); -+ return _PyObject_FromUid(getuid()); - } - #endif - -@@ -6702,15 +6706,9 @@ Set the current process's user id."); - static PyObject * - posix_setuid(PyObject *self, PyObject *args) - { -- long uid_arg; - uid_t uid; -- if (!PyArg_ParseTuple(args, "l:setuid", &uid_arg)) -- return NULL; -- uid = uid_arg; -- if (uid != uid_arg) { -- PyErr_SetString(PyExc_OverflowError, "user id too big"); -+ if (!PyArg_ParseTuple(args, "O&:setuid", _PyArg_ParseUid, &uid)) - return NULL; -- } - if (setuid(uid) < 0) - return posix_error(); - Py_INCREF(Py_None); -@@ -6727,15 +6725,9 @@ Set the current process's effective user - static PyObject * - posix_seteuid (PyObject *self, PyObject *args) - { -- long euid_arg; - uid_t euid; -- if (!PyArg_ParseTuple(args, "l", &euid_arg)) -+ if (!PyArg_ParseTuple(args, "O&:seteuid", _PyArg_ParseUid, &euid)) - return NULL; -- euid = euid_arg; -- if (euid != euid_arg) { -- PyErr_SetString(PyExc_OverflowError, "user id too big"); -- return NULL; -- } - if (seteuid(euid) < 0) { - return posix_error(); - } else { -@@ -6753,15 +6745,9 @@ Set the current process's effective grou - static PyObject * - posix_setegid (PyObject *self, PyObject *args) - { -- long egid_arg; - gid_t egid; -- if (!PyArg_ParseTuple(args, "l", &egid_arg)) -- return NULL; -- egid = egid_arg; -- if (egid != egid_arg) { -- PyErr_SetString(PyExc_OverflowError, "group id too big"); -+ if (!PyArg_ParseTuple(args, "O&:setegid", _PyArg_ParseGid, &egid)) - return NULL; -- } - if (setegid(egid) < 0) { - return posix_error(); - } else { -@@ -6779,23 +6765,11 @@ Set the current process's real and effec - static PyObject * - posix_setreuid (PyObject *self, PyObject *args) - { -- long ruid_arg, euid_arg; - uid_t ruid, euid; -- if (!PyArg_ParseTuple(args, "ll", &ruid_arg, &euid_arg)) -- return NULL; -- if (ruid_arg == -1) -- ruid = (uid_t)-1; /* let the compiler choose how -1 fits */ -- else -- ruid = ruid_arg; /* otherwise, assign from our long */ -- if (euid_arg == -1) -- euid = (uid_t)-1; -- else -- euid = euid_arg; -- if ((euid_arg != -1 && euid != euid_arg) || -- (ruid_arg != -1 && ruid != ruid_arg)) { -- PyErr_SetString(PyExc_OverflowError, "user id too big"); -+ if (!PyArg_ParseTuple(args, "O&O&", -+ _PyArg_ParseUid, &ruid, -+ _PyArg_ParseUid, &euid)) - return NULL; -- } - if (setreuid(ruid, euid) < 0) { - return posix_error(); - } else { -@@ -6813,23 +6787,11 @@ Set the current process's real and effec - static PyObject * - posix_setregid (PyObject *self, PyObject *args) - { -- long rgid_arg, egid_arg; - gid_t rgid, egid; -- if (!PyArg_ParseTuple(args, "ll", &rgid_arg, &egid_arg)) -- return NULL; -- if (rgid_arg == -1) -- rgid = (gid_t)-1; /* let the compiler choose how -1 fits */ -- else -- rgid = rgid_arg; /* otherwise, assign from our long */ -- if (egid_arg == -1) -- egid = (gid_t)-1; -- else -- egid = egid_arg; -- if ((egid_arg != -1 && egid != egid_arg) || -- (rgid_arg != -1 && rgid != rgid_arg)) { -- PyErr_SetString(PyExc_OverflowError, "group id too big"); -+ if (!PyArg_ParseTuple(args, "O&O&", -+ _PyArg_ParseGid, &rgid, -+ _PyArg_ParseGid, &egid)) - return NULL; -- } - if (setregid(rgid, egid) < 0) { - return posix_error(); - } else { -@@ -6847,15 +6809,9 @@ Set the current process's group id."); - static PyObject * - posix_setgid(PyObject *self, PyObject *args) - { -- long gid_arg; - gid_t gid; -- if (!PyArg_ParseTuple(args, "l:setgid", &gid_arg)) -+ if (!PyArg_ParseTuple(args, "O&:setgid", _PyArg_ParseGid, &gid)) - return NULL; -- gid = gid_arg; -- if (gid != gid_arg) { -- PyErr_SetString(PyExc_OverflowError, "group id too big"); -- return NULL; -- } - if (setgid(gid) < 0) - return posix_error(); - Py_INCREF(Py_None); -@@ -6888,27 +6844,9 @@ posix_setgroups(PyObject *self, PyObject - elem = PySequence_GetItem(groups, i); - if (!elem) - return NULL; -- if (!PyLong_Check(elem)) { -- PyErr_SetString(PyExc_TypeError, -- "groups must be integers"); -+ if (!_PyArg_ParseGid(elem, &grouplist[i])) { - Py_DECREF(elem); - return NULL; -- } else { -- unsigned long x = PyLong_AsUnsignedLong(elem); -- if (PyErr_Occurred()) { -- PyErr_SetString(PyExc_TypeError, -- "group id too big"); -- Py_DECREF(elem); -- return NULL; -- } -- grouplist[i] = x; -- /* read back the value to see if it fitted in gid_t */ -- if (grouplist[i] != x) { -- PyErr_SetString(PyExc_TypeError, -- "group id too big"); -- Py_DECREF(elem); -- return NULL; -- } - } - Py_DECREF(elem); - } -@@ -10388,9 +10326,11 @@ Set the current process's real, effectiv - static PyObject* - posix_setresuid (PyObject *self, PyObject *args) - { -- /* We assume uid_t is no larger than a long. */ -- long ruid, euid, suid; -- if (!PyArg_ParseTuple(args, "lll", &ruid, &euid, &suid)) -+ uid_t ruid, euid, suid; -+ if (!PyArg_ParseTuple(args, "O&O&O&", -+ _PyArg_ParseUid, &ruid, -+ _PyArg_ParseUid, &euid, -+ _PyArg_ParseUid, &suid)) - return NULL; - if (setresuid(ruid, euid, suid) < 0) - return posix_error(); -@@ -10406,9 +10346,11 @@ Set the current process's real, effectiv - static PyObject* - posix_setresgid (PyObject *self, PyObject *args) - { -- /* We assume uid_t is no larger than a long. */ -- long rgid, egid, sgid; -- if (!PyArg_ParseTuple(args, "lll", &rgid, &egid, &sgid)) -+ gid_t rgid, egid, sgid; -+ if (!PyArg_ParseTuple(args, "O&O&O&", -+ _PyArg_ParseGid, &rgid, -+ _PyArg_ParseGid, &egid, -+ _PyArg_ParseGid, &sgid)) - return NULL; - if (setresgid(rgid, egid, sgid) < 0) - return posix_error(); -@@ -10425,14 +10367,13 @@ static PyObject* - posix_getresuid (PyObject *self, PyObject *noargs) - { - uid_t ruid, euid, suid; -- long l_ruid, l_euid, l_suid; -+ PyObject *obj_ruid, *obj_euid, *obj_suid; - if (getresuid(&ruid, &euid, &suid) < 0) - return posix_error(); -- /* Force the values into long's as we don't know the size of uid_t. */ -- l_ruid = ruid; -- l_euid = euid; -- l_suid = suid; -- return Py_BuildValue("(lll)", l_ruid, l_euid, l_suid); -+ obj_ruid = _PyObject_FromUid(ruid); -+ obj_euid = _PyObject_FromUid(euid); -+ obj_suid = _PyObject_FromUid(suid); -+ return Py_BuildValue("(NNN)", obj_ruid, obj_euid, obj_suid); - } - #endif - -@@ -10445,14 +10386,13 @@ static PyObject* - posix_getresgid (PyObject *self, PyObject *noargs) - { - uid_t rgid, egid, sgid; -- long l_rgid, l_egid, l_sgid; -+ PyObject *obj_rgid, *obj_egid, *obj_sgid; - if (getresgid(&rgid, &egid, &sgid) < 0) - return posix_error(); -- /* Force the values into long's as we don't know the size of uid_t. */ -- l_rgid = rgid; -- l_egid = egid; -- l_sgid = sgid; -- return Py_BuildValue("(lll)", l_rgid, l_egid, l_sgid); -+ obj_rgid = _PyObject_FromGid(rgid); -+ obj_egid = _PyObject_FromGid(egid); -+ obj_sgid = _PyObject_FromGid(sgid); -+ return Py_BuildValue("(NNN)", obj_rgid, obj_egid, obj_sgid); - } - #endif - -diff -up Python-3.3.0b1/Modules/pwdmodule.c.uid-gid-overflows Python-3.3.0b1/Modules/pwdmodule.c ---- Python-3.3.0b1/Modules/pwdmodule.c.uid-gid-overflows 2012-06-26 16:19:54.000000000 -0400 -+++ Python-3.3.0b1/Modules/pwdmodule.c 2012-07-20 14:21:46.861688675 -0400 -@@ -74,8 +74,8 @@ mkpwent(struct passwd *p) - #else - SETS(setIndex++, p->pw_passwd); - #endif -- SETI(setIndex++, p->pw_uid); -- SETI(setIndex++, p->pw_gid); -+ PyStructSequence_SET_ITEM(v, setIndex++, _PyObject_FromUid(p->pw_uid)); -+ PyStructSequence_SET_ITEM(v, setIndex++, _PyObject_FromGid(p->pw_gid)); - #ifdef __VMS - SETS(setIndex++, ""); - #else -@@ -104,13 +104,14 @@ See help(pwd) for more on password datab - static PyObject * - pwd_getpwuid(PyObject *self, PyObject *args) - { -- unsigned int uid; -+ uid_t uid; - struct passwd *p; -- if (!PyArg_ParseTuple(args, "I:getpwuid", &uid)) -+ if (!PyArg_ParseTuple(args, "O&:getpwuid", -+ _PyArg_ParseUid, &uid)) - return NULL; - if ((p = getpwuid(uid)) == NULL) { - PyErr_Format(PyExc_KeyError, -- "getpwuid(): uid not found: %d", uid); -+ "getpwuid(): uid not found: %lu", (unsigned long)uid); - return NULL; - } - return mkpwent(p); -diff -up Python-3.3.0b1/Python/getargs.c.uid-gid-overflows Python-3.3.0b1/Python/getargs.c ---- Python-3.3.0b1/Python/getargs.c.uid-gid-overflows 2012-06-26 16:19:57.000000000 -0400 -+++ Python-3.3.0b1/Python/getargs.c 2012-07-20 14:21:46.861688675 -0400 -@@ -4,6 +4,7 @@ - #include "Python.h" - - #include -+#include - - - #ifdef __cplusplus -@@ -1807,6 +1808,102 @@ _PyArg_NoKeywords(const char *funcname, - funcname); - return 0; - } -+ -+PyObject * -+_PyObject_FromUid(uid_t uid) -+{ -+ return PyLong_FromUnsignedLong((uid_t)uid); -+} -+ -+PyObject * -+_PyObject_FromGid(gid_t gid) -+{ -+ return PyLong_FromUnsignedLong((gid_t)gid); -+} -+ -+int -+_PyArg_ParseUid(PyObject *in_obj, uid_t *out_uid) -+{ -+ PyObject *index, *number = NULL; -+ long sl; -+ unsigned long ul; -+ -+ assert(out_uid); -+ -+ index = PyNumber_Index(in_obj); -+ if (index != NULL) { -+ number = PyNumber_Long(index); -+ Py_DECREF(index); -+ } -+ if (number == NULL) { -+ PyErr_SetString(PyExc_TypeError, "user id must be integer"); -+ return 0; -+ } -+ -+ /* Special case: support -1 (e.g. for use by chown) */ -+ sl = PyLong_AsLong(number); -+ if (PyErr_Occurred()) { -+ PyErr_Clear(); -+ } else if (sl == -1) { -+ Py_DECREF(number); -+ *out_uid = (uid_t)-1; -+ return 1; -+ } -+ -+ /* Otherwise, it must be >= 0 */ -+ ul = PyLong_AsUnsignedLong(number); -+ Py_DECREF(number); -+ *out_uid = ul; -+ /* read back the value to see if it fitted in uid_t */ -+ if (PyErr_Occurred() || *out_uid != ul) { -+ PyErr_SetString(PyExc_OverflowError, -+ "user id is not in range(-1, 2^32-1)"); -+ return 0; -+ } -+ return 1; -+} -+ -+int -+_PyArg_ParseGid(PyObject *in_obj, gid_t *out_gid) -+{ -+ PyObject *index, *number = NULL; -+ long sl; -+ unsigned long ul; -+ -+ assert(out_gid); -+ -+ index = PyNumber_Index(in_obj); -+ if (index != NULL) { -+ number = PyNumber_Long(index); -+ Py_DECREF(index); -+ } -+ if (number == NULL) { -+ PyErr_SetString(PyExc_TypeError, "group id must be integer"); -+ return 0; -+ } -+ -+ /* Special case: support -1 (e.g. for use by chown) */ -+ sl = PyLong_AsLong(number); -+ if (PyErr_Occurred()) { -+ PyErr_Clear(); -+ } else if (sl == -1) { -+ Py_DECREF(number); -+ *out_gid = (gid_t)-1; -+ return 1; -+ } -+ -+ ul = PyLong_AsUnsignedLong(number); -+ Py_DECREF(number); -+ *out_gid = ul; -+ /* read back the value to see if it fitted in gid_t */ -+ if (PyErr_Occurred() || *out_gid != ul) { -+ PyErr_SetString(PyExc_OverflowError, -+ "group id is not in range(-1, 2^32-1)"); -+ return 0; -+ } -+ return 1; -+} -+ - #ifdef __cplusplus - }; - #endif diff --git a/00178-dont-duplicate-flags-in-sysconfig.patch b/00178-dont-duplicate-flags-in-sysconfig.patch new file mode 100644 index 0000000..fc49b30 --- /dev/null +++ b/00178-dont-duplicate-flags-in-sysconfig.patch @@ -0,0 +1,30 @@ +diff -r 39b9b05c3085 Lib/distutils/sysconfig.py +--- a/Lib/distutils/sysconfig.py Wed Apr 10 00:27:23 2013 +0200 ++++ b/Lib/distutils/sysconfig.py Wed Apr 10 10:14:18 2013 +0200 +@@ -362,7 +362,10 @@ + done[n] = item = "" + if found: + after = value[m.end():] +- value = value[:m.start()] + item + after ++ value = value[:m.start()] ++ if item.strip() not in value: ++ value += item ++ value += after + if "$" in after: + notdone[name] = value + else: +diff -r 39b9b05c3085 Lib/sysconfig.py +--- a/Lib/sysconfig.py Wed Apr 10 00:27:23 2013 +0200 ++++ b/Lib/sysconfig.py Wed Apr 10 10:14:18 2013 +0200 +@@ -296,7 +296,10 @@ + + if found: + after = value[m.end():] +- value = value[:m.start()] + item + after ++ value = value[:m.start()] ++ if item.strip() not in value: ++ value += item ++ value += after + if "$" in after: + notdone[name] = value + else: diff --git a/05000-autotool-intermediates.patch b/05000-autotool-intermediates.patch index 38df469..1a0c3c6 100644 --- a/05000-autotool-intermediates.patch +++ b/05000-autotool-intermediates.patch @@ -1,7 +1,7 @@ diff -up ./configure.autotool-intermediates ./configure ---- ./configure.autotool-intermediates 2013-03-25 16:11:38.140657282 -0400 -+++ ./configure 2013-03-25 16:11:46.922656680 -0400 -@@ -779,6 +779,8 @@ with_thread +--- ./configure.autotool-intermediates 2013-04-09 14:52:49.831773426 +0200 ++++ ./configure 2013-04-09 14:52:53.204765347 +0200 +@@ -802,6 +802,8 @@ with_thread enable_ipv6 with_doc_strings with_tsc @@ -10,7 +10,7 @@ diff -up ./configure.autotool-intermediates ./configure with_pymalloc with_valgrind with_systemtap -@@ -1457,6 +1459,8 @@ Optional Packages: +@@ -1479,6 +1481,8 @@ Optional Packages: deprecated; use --with(out)-threads --with(out)-doc-strings disable/enable documentation strings --with(out)-tsc enable/disable timestamp counter profile @@ -19,7 +19,7 @@ diff -up ./configure.autotool-intermediates ./configure --with(out)-pymalloc disable/enable specialized mallocs --with-valgrind Enable Valgrind support --with(out)-systemtap disable/enable SystemTap support -@@ -6471,7 +6475,7 @@ then +@@ -6529,7 +6533,7 @@ then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc supports ParseTuple __format__" >&5 $as_echo_n "checking whether gcc supports ParseTuple __format__... " >&6; } save_CFLAGS=$CFLAGS @@ -28,7 +28,7 @@ diff -up ./configure.autotool-intermediates ./configure cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -@@ -10008,6 +10012,50 @@ $as_echo "#define WITH_TSC 1" >>confdefs +@@ -10117,6 +10121,50 @@ $as_echo "#define WITH_TSC 1" >>confdefs { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } @@ -80,3 +80,15 @@ diff -up ./configure.autotool-intermediates ./configure $as_echo "no" >&6; } fi diff -up ./pyconfig.h.in.autotool-intermediates ./pyconfig.h.in +--- ./pyconfig.h.in.autotool-intermediates 2013-04-09 14:52:49.829773431 +0200 ++++ ./pyconfig.h.in 2013-04-09 14:52:53.488764667 +0200 +@@ -1193,9 +1193,6 @@ + /* Define if setpgrp() must be called as setpgrp(0, 0). */ + #undef SETPGRP_HAVE_ARG + +-/* Define this to be extension of shared libraries (including the dot!). */ +-#undef SHLIB_EXT +- + /* Define if i>>j for signed int i does not extend the sign bit when i < 0 */ + #undef SIGNED_RIGHT_SHIFT_ZERO_FILLS + diff --git a/python3.spec b/python3.spec index 93e7a3f..307a3d7 100644 --- a/python3.spec +++ b/python3.spec @@ -125,8 +125,8 @@ # ================== Summary: Version 3 of the Python programming language aka Python 3000 Name: python3 -Version: %{pybasever}.0 -Release: 10%{?dist} +Version: %{pybasever}.1 +Release: 1%{?dist} License: Python Group: Development/Languages @@ -222,9 +222,9 @@ Source7: pyfuntop.stp # Was Patch0 in ivazquez' python3000 specfile: Patch1: Python-3.1.1-rpath.patch -# The four TestMIMEAudio tests fail due to "audiotest.au" not being packaged. -# It's simplest to remove them: -Patch3: 00003-remove-mimeaudio-tests.patch +# Some tests were removed due to audiotest.au not being packaged. This was +# however added to the archive in 3.3.1, so we no longer delete the tests. +# Patch3: 00003-remove-mimeaudio-tests.patch # 00055 # # Systemtap support: add statically-defined probe points @@ -462,9 +462,7 @@ Patch156: 00156-gdb-autoload-safepath.patch Patch157: 00157-uid-gid-overflows.patch # 00158 # -# Patch158: 00158-fix-hashlib-leak.patch -# in python.spec -# TODO: python3 status? +# Upstream as of Python 3.3.1 # 00159 # # Patch159: 00159-correct-libdb-include-path.patch @@ -528,13 +526,13 @@ Patch164: 00164-disable-interrupted_write-tests-on-ppc.patch # TODO: python3 status? # 00171 # +# python.spec had: # Patch171: 00171-raise-correct-exception-when-dev-urandom-is-missing.patch -# in python.spec # TODO: python3 status? # 00172 # +# python.spec had: # Patch172: 00172-use-poll-for-multiprocessing-socket-connection.patch -# in python.spec # TODO: python3 status? # 00173 # @@ -556,12 +554,8 @@ Patch173: 00173-workaround-ENOPROTOOPT-in-bind_port.patch Patch175: 00175-fix-configure-Wformat.patch # 00176 # -# Potential patch for so extensions being wrong since SOABI in upstream python3. -# http://bugs.python.org/issue16754 -# (rhbz#889784) -# Does not affect python2 (python2 does not have compiled extensions with the -# problematic information) -Patch176: 00176-upstream-issue16754-so-extension.patch +# Fixed upstream as of Python 3.3.1 +# Patch176: 00176-upstream-issue16754-so-extension.patch # 00177 # # Patch for potential unicode error when determining OS release names @@ -570,6 +564,11 @@ Patch176: 00176-upstream-issue16754-so-extension.patch # Does not affect python2 (python2 uses a byte string so it doesn't need to decode) Patch177: 00177-platform-unicode.patch +# 00178 # +# Don't duplicate various FLAGS in sysconfig values +# http://bugs.python.org/issue17679 +# Does not affect python2 AFAICS (different sysconfig values initialization) +Patch178: 00178-dont-duplicate-flags-in-sysconfig.patch # (New patches go here ^^^) # @@ -744,7 +743,7 @@ done # Apply patches: # %patch1 -p1 -%patch3 -p1 -b .remove-mimeaudio-tests +# 3: upstream as of Python 3.3.1 %if 0%{?with_systemtap} %patch55 -p1 -b .systemtap @@ -819,8 +818,9 @@ done %patch173 -p1 #00174: TODO %patch175 -p1 -%patch176 -p1 +# 00176: upstream as of Python 3.3.1 %patch177 -p1 +%patch178 -p1 # Currently (2010-01-15), http://docs.python.org/library is for 2.6, and there # are many differences between 2.6 and the Python 3 library. @@ -868,7 +868,7 @@ for f in pyconfig.h.in configure ; do done # Rerun the autotools: -PATH=~/autoconf-2.65/bin:$PATH autoreconf +autoreconf # Regenerate the patch: gendiff . .autotool-intermediates > %{PATCH5000} @@ -969,12 +969,6 @@ InstallPython() { pushd $ConfDir - # Workaround for http://bugs.python.org/issue14774 : Lib/_sysconfigdata.py - # is in the srcdir but contains per-config data. - # Regenerate it each time: - rm -f ../../Lib/_sysconfigdata.py - make $topdir/Lib/_sysconfigdata.py - make install DESTDIR=%{buildroot} INSTALL="install -p" popd @@ -1256,13 +1250,6 @@ CheckPython() { # Note that we're running the tests using the version of the code in the # builddir, not in the buildroot. - # Workaround for http://bugs.python.org/issue14774, as per the install - # stanza (albeit from a different directory): - rm -f Lib/_sysconfigdata.py - pushd $ConfDir - make $topdir/Lib/_sysconfigdata.py - popd - # Run the upstream test suite, setting "WITHIN_PYTHON_RPM_BUILD" so that the # our non-standard decorators take effect on the relevant tests: # @unittest._skipInRpmBuild(reason) @@ -1677,6 +1664,15 @@ rm -fr %{buildroot} # ====================================================== %changelog +* Tue Apr 09 2013 Bohuslav Kabrda - 3.3.1-1 +- Updated to Python 3.3.1. +- Refreshed patches: 55 (systemtap), 111 (no static lib), 146 (hashlib fips), +153 (fix test_gdb noise), 157 (uid, gid overflow - fixed upstream, just +keeping few more downstream tests) +- Removed patches: 3 (audiotest.au made it to upstream tarball) +- Removed workaround for http://bugs.python.org/issue14774, discussed in +http://bugs.python.org/issue15298 and fixed in revision 24d52d3060e8. + * Mon Mar 25 2013 David Malcolm - 3.3.0-10 - fix gcc 4.8 incompatibility (rhbz#927358); regenerate autotool intermediates diff --git a/sources b/sources index 3f2585f..b8490ab 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -2e7533b4009ac4adae62a7797a442e7a Python-3.3.0.tar.xz +993232d9f4d9b4863cc1ec69a792e9cd Python-3.3.1.tar.xz From b935d25938262c5161ab89752972f642f7dea5b6 Mon Sep 17 00:00:00 2001 From: Bohuslav Kabrda Date: Wed, 24 Apr 2013 11:47:45 +0200 Subject: [PATCH 2/7] Add fix for gdb tests failing on arm, rhbz#951802. --- ...on-gdb-corrupted-frames-in-backtrace.patch | 48 +++++++++++++++++++ python3.spec | 15 +++++- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch diff --git a/00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch b/00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch new file mode 100644 index 0000000..2112730 --- /dev/null +++ b/00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch @@ -0,0 +1,48 @@ +--- a/Tools/gdb/libpython.py 2013-04-06 03:41:58.000000000 -0400 ++++ b/Tools/gdb/libpython.py 2013-04-24 03:51:04.720540343 -0400 +@@ -274,6 +274,9 @@ + self.tp_name = tp_name + self.address = address + ++ def __len__(self): ++ return len(repr(self)) ++ + def __repr__(self): + # For the NULL pointer, we have no way of knowing a type, so + # special-case it as per +@@ -881,6 +884,8 @@ + filename = self.filename() + try: + f = open(os_fsencode(filename), 'r') ++ except TypeError: # filename is FakeRepr ++ return None + except IOError: + return None + with f: +@@ -1523,9 +1528,12 @@ + + def print_summary(self): + if self.is_evalframeex(): +- pyop = self.get_pyop() +- if pyop: ++ try: ++ pyop = self.get_pyop() + line = pyop.get_truncated_repr(MAX_OUTPUT_LEN) ++ except: ++ pyop = None ++ if pyop: + write_unicode(sys.stdout, '#%i %s\n' % (self.get_index(), line)) + if not pyop.is_optimized_out(): + line = pyop.current_line() +@@ -1542,7 +1550,10 @@ + + def print_traceback(self): + if self.is_evalframeex(): +- pyop = self.get_pyop() ++ try: ++ pyop = self.get_pyop() ++ except: ++ pyop = None + if pyop: + pyop.print_traceback() + if not pyop.is_optimized_out(): diff --git a/python3.spec b/python3.spec index 307a3d7..eeeba9c 100644 --- a/python3.spec +++ b/python3.spec @@ -126,7 +126,7 @@ Summary: Version 3 of the Python programming language aka Python 3000 Name: python3 Version: %{pybasever}.1 -Release: 1%{?dist} +Release: 2%{?dist} License: Python Group: Development/Languages @@ -570,6 +570,15 @@ Patch177: 00177-platform-unicode.patch # Does not affect python2 AFAICS (different sysconfig values initialization) Patch178: 00178-dont-duplicate-flags-in-sysconfig.patch +# 00179 # +# Workaround for https://bugzilla.redhat.com/show_bug.cgi?id=951802 +# Reported upstream in http://bugs.python.org/issue17737 +# This patch basically looks at every frame and if it is somehow corrupted, +# it just stops printing the traceback - it doesn't fix the actual bug. +# This bug seems to only affect ARM. +# Doesn't seem to affect Python 2 AFAICS. +Patch179: 00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch + # (New patches go here ^^^) # # When adding new patches to "python" and "python3" in Fedora 17 onwards, @@ -821,6 +830,7 @@ done # 00176: upstream as of Python 3.3.1 %patch177 -p1 %patch178 -p1 +%patch179 -p1 # Currently (2010-01-15), http://docs.python.org/library is for 2.6, and there # are many differences between 2.6 and the Python 3 library. @@ -1664,6 +1674,9 @@ rm -fr %{buildroot} # ====================================================== %changelog +* Wed Apr 24 2013 Bohuslav Kabrda - 3.3.1-2 +- Add fix for gdb tests failing on arm, rhbz#951802. + * Tue Apr 09 2013 Bohuslav Kabrda - 3.3.1-1 - Updated to Python 3.3.1. - Refreshed patches: 55 (systemtap), 111 (no static lib), 146 (hashlib fips), From f9db6e6f659d4b086e5cea8b8ce0aad925ee606e Mon Sep 17 00:00:00 2001 From: Bohuslav Kabrda Date: Thu, 2 May 2013 09:41:28 +0200 Subject: [PATCH 3/7] Add patch that enables building on ppc64p7 (replace the sed, so that we get consistent with python2 spec and it's more obvious that we're doing it. --- 00180-python-add-support-for-ppc64p7.patch | 12 ++++++++++++ python3.spec | 15 +++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 00180-python-add-support-for-ppc64p7.patch diff --git a/00180-python-add-support-for-ppc64p7.patch b/00180-python-add-support-for-ppc64p7.patch new file mode 100644 index 0000000..022944a --- /dev/null +++ b/00180-python-add-support-for-ppc64p7.patch @@ -0,0 +1,12 @@ +diff -r de35eae9048a config.sub +--- a/config.sub Wed Apr 24 23:33:20 2013 +0200 ++++ b/config.sub Thu Apr 25 08:51:00 2013 +0200 +@@ -1008,7 +1008,7 @@ + ;; + ppc64) basic_machine=powerpc64-unknown + ;; +- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown diff --git a/python3.spec b/python3.spec index eeeba9c..481e9ca 100644 --- a/python3.spec +++ b/python3.spec @@ -126,7 +126,7 @@ Summary: Version 3 of the Python programming language aka Python 3000 Name: python3 Version: %{pybasever}.1 -Release: 2%{?dist} +Release: 3%{?dist} License: Python Group: Development/Languages @@ -579,6 +579,11 @@ Patch178: 00178-dont-duplicate-flags-in-sysconfig.patch # Doesn't seem to affect Python 2 AFAICS. Patch179: 00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch +# 00180 # +# Enable building on ppc64p7 +# Not appropriate for upstream, Fedora-specific naming +Patch180: 00180-python-add-support-for-ppc64p7.patch + # (New patches go here ^^^) # # When adding new patches to "python" and "python3" in Fedora 17 onwards, @@ -831,6 +836,7 @@ done %patch177 -p1 %patch178 -p1 %patch179 -p1 +%patch180 -p1 # Currently (2010-01-15), http://docs.python.org/library is for 2.6, and there # are many differences between 2.6 and the Python 3 library. @@ -848,9 +854,6 @@ sed --in-place \ %patch5000 -p0 -b .autotool-intermediates %endif -# Add target for optimized Power7 binaries: -sed -i -e "s/ppc64-\*/ppc64-\* \| ppc64p7-\*/" config.sub - # ====================================================== # Configuring and building the code: # ====================================================== @@ -1674,6 +1677,10 @@ rm -fr %{buildroot} # ====================================================== %changelog +* Thu May 02 2013 Bohuslav Kabrda - 3.3.1-3 +- Add patch that enables building on ppc64p7 (replace the sed, so that +we get consistent with python2 spec and it's more obvious that we're doing it. + * Wed Apr 24 2013 Bohuslav Kabrda - 3.3.1-2 - Add fix for gdb tests failing on arm, rhbz#951802. From 9d658b4031a765b4b2fc7a4cfde5337736019c42 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Thu, 9 May 2013 12:19:36 -0400 Subject: [PATCH 4/7] 3.3.1-4: fix test.test_gdb.PyBtTests.test_threads on ppc64 (rhbz#960010) * Thu May 9 2013 David Malcolm - 3.3.1-4 - fix test.test_gdb.PyBtTests.test_threads on ppc64 (patch 181; rhbz#960010) --- 00181-fix-test_gdb-test_threads.patch | 13 +++++++++++++ python3.spec | 14 +++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 00181-fix-test_gdb-test_threads.patch diff --git a/00181-fix-test_gdb-test_threads.patch b/00181-fix-test_gdb-test_threads.patch new file mode 100644 index 0000000..41de5b2 --- /dev/null +++ b/00181-fix-test_gdb-test_threads.patch @@ -0,0 +1,13 @@ +diff -up Python-3.3.1/Misc/NEWS.fix-test_gdb-test_threads Python-3.3.1/Misc/NEWS +diff -up Python-3.3.1/Tools/gdb/libpython.py.fix-test_gdb-test_threads Python-3.3.1/Tools/gdb/libpython.py +--- Python-3.3.1/Tools/gdb/libpython.py.fix-test_gdb-test_threads 2013-05-09 12:12:01.621592211 -0400 ++++ Python-3.3.1/Tools/gdb/libpython.py 2013-05-09 12:12:01.632592209 -0400 +@@ -1465,7 +1465,7 @@ class Frame(object): + # This assumes the _POSIX_THREADS version of Python/ceval_gil.h: + name = self._gdbframe.name() + if name: +- return name.startswith('pthread_cond_timedwait') ++ return 'pthread_cond_timedwait' in name + + def is_gc_collect(self): + '''Is this frame "collect" within the garbage-collector?''' diff --git a/python3.spec b/python3.spec index 481e9ca..e66e9bf 100644 --- a/python3.spec +++ b/python3.spec @@ -126,7 +126,7 @@ Summary: Version 3 of the Python programming language aka Python 3000 Name: python3 Version: %{pybasever}.1 -Release: 3%{?dist} +Release: 4%{?dist} License: Python Group: Development/Languages @@ -584,6 +584,14 @@ Patch179: 00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch # Not appropriate for upstream, Fedora-specific naming Patch180: 00180-python-add-support-for-ppc64p7.patch +# 00181 # +# Fix test.test_gdb.PyBtTests.test_threads on ppc64 +# Cherrypicked from upstream commit: +# http://hg.python.org/cpython/rev/f4a6b731905a/ +# for upstream issue http://bugs.python.org/issue17833 +# (rhbz#960010) +Patch181: 00181-fix-test_gdb-test_threads.patch + # (New patches go here ^^^) # # When adding new patches to "python" and "python3" in Fedora 17 onwards, @@ -837,6 +845,7 @@ done %patch178 -p1 %patch179 -p1 %patch180 -p1 +%patch181 -p1 # Currently (2010-01-15), http://docs.python.org/library is for 2.6, and there # are many differences between 2.6 and the Python 3 library. @@ -1677,6 +1686,9 @@ rm -fr %{buildroot} # ====================================================== %changelog +* Thu May 9 2013 David Malcolm - 3.3.1-4 +- fix test.test_gdb.PyBtTests.test_threads on ppc64 (patch 181; rhbz#960010) + * Thu May 02 2013 Bohuslav Kabrda - 3.3.1-3 - Add patch that enables building on ppc64p7 (replace the sed, so that we get consistent with python2 spec and it's more obvious that we're doing it. From a60a842ced8fcad62b87b67539a2ecfa4d21d2ec Mon Sep 17 00:00:00 2001 From: Bohuslav Kabrda Date: Thu, 16 May 2013 16:35:48 +0200 Subject: [PATCH 5/7] Updated to Python 3.3.2. - Refreshed patches: 153 (gdb test noise) - Dropped patches: 175 (configure -Wformat, fixed upstream) - Synced patch numbers with python.spec. --- 00153-fix-test_gdb-noise.patch | 37 ++++++++----------- ...h => 00182-fix-test_gdb-test_threads.patch | 0 05000-autotool-intermediates.patch | 22 ----------- python3.spec | 34 ++++++++++------- sources | 2 +- 5 files changed, 38 insertions(+), 57 deletions(-) rename 00181-fix-test_gdb-test_threads.patch => 00182-fix-test_gdb-test_threads.patch (100%) diff --git a/00153-fix-test_gdb-noise.patch b/00153-fix-test_gdb-noise.patch index c65787f..50a0917 100644 --- a/00153-fix-test_gdb-noise.patch +++ b/00153-fix-test_gdb-noise.patch @@ -1,7 +1,6 @@ -diff -up cpython-59223da36dec/Lib/test/test_gdb.py.fix-test_gdb-noise cpython-59223da36dec/Lib/test/test_gdb.py ---- cpython-59223da36dec/Lib/test/test_gdb.py.fix-test_gdb-noise 2012-08-07 06:10:57.000000000 -0400 -+++ cpython-59223da36dec/Lib/test/test_gdb.py 2012-08-07 17:13:46.592343113 -0400 -@@ -115,6 +115,15 @@ class DebuggerTests(unittest.TestCase): +--- Lib/test/test_gdb.py.old 2012-04-11 21:04:01.367073855 -0400 ++++ Lib/test/test_gdb.py 2012-04-12 08:52:58.320288761 -0400 +@@ -96,6 +96,15 @@ class DebuggerTests(unittest.TestCase): # Generate a list of commands in gdb's language: commands = ['set breakpoint pending yes', 'break %s' % breakpoint, @@ -17,20 +16,16 @@ diff -up cpython-59223da36dec/Lib/test/test_gdb.py.fix-test_gdb-noise cpython-59 'run'] if cmds_after_breakpoint: commands += cmds_after_breakpoint -@@ -154,8 +163,16 @@ class DebuggerTests(unittest.TestCase): - 'Do you need "set solib-search-path" or ' - '"set sysroot"?\n', - '') -+ err = '\n'.join([line -+ for line in err.splitlines() -+ if not line.startswith('warning: Unable to open') -+ if not line.startswith('Missing separate debuginfo for') -+ if not line.startswith('Try: yum --disablerepo=') -+ # In case 'set print entry-values no' failed: -+ if not line.startswith('Undefined set print command')]) - - # Ensure no unexpected error messages: -+ self.maxDiff = None - self.assertEqual(err, '') - return out - +--- Lib/test/test_gdb.py.old 2012-04-11 21:04:01.367073855 -0400 ++++ Lib/test/test_gdb.py 2012-04-12 08:52:58.320288761 -0400 +@@ -144,6 +153,10 @@ + 'Do you need "set solib-search-path" or ' + '"set sysroot"?', + ) ++ ignore_patterns += ('warning: Unable to open', ++ 'Missing separate debuginfo for', ++ 'Try: yum --disablerepo=', ++ 'Undefined set print command') + for line in errlines: + if not line.startswith(ignore_patterns): + unexpected_errlines.append(line) diff --git a/00181-fix-test_gdb-test_threads.patch b/00182-fix-test_gdb-test_threads.patch similarity index 100% rename from 00181-fix-test_gdb-test_threads.patch rename to 00182-fix-test_gdb-test_threads.patch diff --git a/05000-autotool-intermediates.patch b/05000-autotool-intermediates.patch index 1a0c3c6..903cbf0 100644 --- a/05000-autotool-intermediates.patch +++ b/05000-autotool-intermediates.patch @@ -19,15 +19,6 @@ diff -up ./configure.autotool-intermediates ./configure --with(out)-pymalloc disable/enable specialized mallocs --with-valgrind Enable Valgrind support --with(out)-systemtap disable/enable SystemTap support -@@ -6529,7 +6533,7 @@ then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc supports ParseTuple __format__" >&5 - $as_echo_n "checking whether gcc supports ParseTuple __format__... " >&6; } - save_CFLAGS=$CFLAGS -- CFLAGS="$CFLAGS -Werror" -+ CFLAGS="$CFLAGS -Werror -Wformat" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - @@ -10117,6 +10121,50 @@ $as_echo "#define WITH_TSC 1" >>confdefs { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -79,16 +70,3 @@ diff -up ./configure.autotool-intermediates ./configure else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi -diff -up ./pyconfig.h.in.autotool-intermediates ./pyconfig.h.in ---- ./pyconfig.h.in.autotool-intermediates 2013-04-09 14:52:49.829773431 +0200 -+++ ./pyconfig.h.in 2013-04-09 14:52:53.488764667 +0200 -@@ -1193,9 +1193,6 @@ - /* Define if setpgrp() must be called as setpgrp(0, 0). */ - #undef SETPGRP_HAVE_ARG - --/* Define this to be extension of shared libraries (including the dot!). */ --#undef SHLIB_EXT -- - /* Define if i>>j for signed int i does not extend the sign bit when i < 0 */ - #undef SIGNED_RIGHT_SHIFT_ZERO_FILLS - diff --git a/python3.spec b/python3.spec index e66e9bf..a7d1d97 100644 --- a/python3.spec +++ b/python3.spec @@ -125,8 +125,8 @@ # ================== Summary: Version 3 of the Python programming language aka Python 3000 Name: python3 -Version: %{pybasever}.1 -Release: 4%{?dist} +Version: %{pybasever}.2 +Release: 1%{?dist} License: Python Group: Development/Languages @@ -545,13 +545,8 @@ Patch173: 00173-workaround-ENOPROTOOPT-in-bind_port.patch # TODO: python3 status? # 00175 # -# Fix for configure.ac mistakenly detecting -# checking whether gcc supports ParseTuple __format__... yes -# when it doesn't, when compiling with gcc 4.8 -# -# Sent upstream as http://bugs.python.org/issue17547 -# (rhbz#927358) -Patch175: 00175-fix-configure-Wformat.patch +# Upstream as of Python 3.3.2 +# Patch175: 00175-fix-configure-Wformat.patch # 00176 # # Fixed upstream as of Python 3.3.1 @@ -584,13 +579,19 @@ Patch179: 00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch # Not appropriate for upstream, Fedora-specific naming Patch180: 00180-python-add-support-for-ppc64p7.patch +# 00181 # +# python.spec has +# Patch181: 00181-allow-arbitrary-timeout-in-condition-wait.patch +# Does not affect python3 + # 00181 # # Fix test.test_gdb.PyBtTests.test_threads on ppc64 # Cherrypicked from upstream commit: # http://hg.python.org/cpython/rev/f4a6b731905a/ # for upstream issue http://bugs.python.org/issue17833 # (rhbz#960010) -Patch181: 00181-fix-test_gdb-test_threads.patch +Patch182: 00182-fix-test_gdb-test_threads.patch + # (New patches go here ^^^) # @@ -815,7 +816,7 @@ done %endif # 00151: not for python3 # 00152: upstream as of Python 3.3.0b2 -%patch153 -p1 +%patch153 -p0 # 00154: not for this branch %patch155 -p1 %patch156 -p1 @@ -839,13 +840,14 @@ done #00172: TODO %patch173 -p1 #00174: TODO -%patch175 -p1 +# 00175: upstream as of Python 3.3.2 # 00176: upstream as of Python 3.3.1 %patch177 -p1 %patch178 -p1 %patch179 -p1 %patch180 -p1 -%patch181 -p1 +# 00181: not for python3 +%patch182 -p1 # Currently (2010-01-15), http://docs.python.org/library is for 2.6, and there # are many differences between 2.6 and the Python 3 library. @@ -1686,6 +1688,12 @@ rm -fr %{buildroot} # ====================================================== %changelog +* Thu May 16 2013 Bohuslav Kabrda - 3.3.2-1 +- Updated to Python 3.3.2. +- Refreshed patches: 153 (gdb test noise) +- Dropped patches: 175 (configure -Wformat, fixed upstream) +- Synced patch numbers with python.spec. + * Thu May 9 2013 David Malcolm - 3.3.1-4 - fix test.test_gdb.PyBtTests.test_threads on ppc64 (patch 181; rhbz#960010) diff --git a/sources b/sources index b8490ab..acfd2af 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -993232d9f4d9b4863cc1ec69a792e9cd Python-3.3.1.tar.xz +c94b78ea3b68a9bbc9906af4d5b4fdc7 Python-3.3.2.tar.xz From d4ea6cd7259c332e0c009f71593b09ea45ff151a Mon Sep 17 00:00:00 2001 From: Bohuslav Kabrda Date: Thu, 16 May 2013 16:49:09 +0200 Subject: [PATCH 6/7] Drop the forgotten gdb test patch that was merged upstream --- python3.spec | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/python3.spec b/python3.spec index a7d1d97..a35ec9d 100644 --- a/python3.spec +++ b/python3.spec @@ -585,12 +585,8 @@ Patch180: 00180-python-add-support-for-ppc64p7.patch # Does not affect python3 # 00181 # -# Fix test.test_gdb.PyBtTests.test_threads on ppc64 -# Cherrypicked from upstream commit: -# http://hg.python.org/cpython/rev/f4a6b731905a/ -# for upstream issue http://bugs.python.org/issue17833 -# (rhbz#960010) -Patch182: 00182-fix-test_gdb-test_threads.patch +# Fixed upstream as of Python 3.3.2 +# Patch182: 00182-fix-test_gdb-test_threads.patch # (New patches go here ^^^) @@ -847,7 +843,7 @@ done %patch179 -p1 %patch180 -p1 # 00181: not for python3 -%patch182 -p1 +# 00182: upstream as of Python 3.3.2 # Currently (2010-01-15), http://docs.python.org/library is for 2.6, and there # are many differences between 2.6 and the Python 3 library. @@ -1691,7 +1687,8 @@ rm -fr %{buildroot} * Thu May 16 2013 Bohuslav Kabrda - 3.3.2-1 - Updated to Python 3.3.2. - Refreshed patches: 153 (gdb test noise) -- Dropped patches: 175 (configure -Wformat, fixed upstream) +- Dropped patches: 175 (configure -Wformat, fixed upstream), 182 (gdb +test threads) - Synced patch numbers with python.spec. * Thu May 9 2013 David Malcolm - 3.3.1-4 From 22e1cc9fb879ab1b423c8ba939738b9e7ac6a797 Mon Sep 17 00:00:00 2001 From: Bohuslav Kabrda Date: Mon, 20 May 2013 08:04:03 +0200 Subject: [PATCH 7/7] Add patch for CVE-2013-2099 (rhbz#963261). --- ...2013-2099-fix-ssl-match_hostname-dos.patch | 49 +++++++++++++++++++ python3.spec | 14 +++++- 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 00183-cve-2013-2099-fix-ssl-match_hostname-dos.patch diff --git a/00183-cve-2013-2099-fix-ssl-match_hostname-dos.patch b/00183-cve-2013-2099-fix-ssl-match_hostname-dos.patch new file mode 100644 index 0000000..888b43b --- /dev/null +++ b/00183-cve-2013-2099-fix-ssl-match_hostname-dos.patch @@ -0,0 +1,49 @@ +# HG changeset patch +# User Antoine Pitrou +# Date 1368892602 -7200 +# Node ID c627638753e2d25a98950585b259104a025937a9 +# Parent 9682241dc8fcb4b1aef083bd30860efa070c3d6d +Issue #17980: Fix possible abuse of ssl.match_hostname() for denial of service using certificates with many wildcards (CVE-2013-2099). + +diff --git a/Lib/ssl.py b/Lib/ssl.py +--- a/Lib/ssl.py ++++ b/Lib/ssl.py +@@ -129,9 +129,16 @@ class CertificateError(ValueError): + pass + + +-def _dnsname_to_pat(dn): ++def _dnsname_to_pat(dn, max_wildcards=1): + pats = [] + for frag in dn.split(r'.'): ++ if frag.count('*') > max_wildcards: ++ # Issue #17980: avoid denials of service by refusing more ++ # than one wildcard per fragment. A survery of established ++ # policy among SSL implementations showed it to be a ++ # reasonable choice. ++ raise CertificateError( ++ "too many wildcards in certificate DNS name: " + repr(dn)) + if frag == '*': + # When '*' is a fragment by itself, it matches a non-empty dotless + # fragment. +diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py +--- a/Lib/test/test_ssl.py ++++ b/Lib/test/test_ssl.py +@@ -349,6 +349,17 @@ class BasicSocketTests(unittest.TestCase + self.assertRaises(ValueError, ssl.match_hostname, None, 'example.com') + self.assertRaises(ValueError, ssl.match_hostname, {}, 'example.com') + ++ # Issue #17980: avoid denials of service by refusing more than one ++ # wildcard per fragment. ++ cert = {'subject': ((('commonName', 'a*b.com'),),)} ++ ok(cert, 'axxb.com') ++ cert = {'subject': ((('commonName', 'a*b.co*'),),)} ++ ok(cert, 'axxb.com') ++ cert = {'subject': ((('commonName', 'a*b*.com'),),)} ++ with self.assertRaises(ssl.CertificateError) as cm: ++ ssl.match_hostname(cert, 'axxbxxc.com') ++ self.assertIn("too many wildcards", str(cm.exception)) ++ + def test_server_side(self): + # server_hostname doesn't work for server sockets + ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23) diff --git a/python3.spec b/python3.spec index a35ec9d..93d8ab7 100644 --- a/python3.spec +++ b/python3.spec @@ -126,7 +126,7 @@ Summary: Version 3 of the Python programming language aka Python 3000 Name: python3 Version: %{pybasever}.2 -Release: 1%{?dist} +Release: 2%{?dist} License: Python Group: Development/Languages @@ -584,10 +584,16 @@ Patch180: 00180-python-add-support-for-ppc64p7.patch # Patch181: 00181-allow-arbitrary-timeout-in-condition-wait.patch # Does not affect python3 -# 00181 # +# 00182 # # Fixed upstream as of Python 3.3.2 # Patch182: 00182-fix-test_gdb-test_threads.patch +# 00183 # +# Upstream fix for CVE-2013-2099 (ssl.match_hostname DOS) +# http://bugs.python.org/issue17980 +# http://hg.python.org/cpython/rev/c627638753e2 +Patch183: 00183-cve-2013-2099-fix-ssl-match_hostname-dos.patch + # (New patches go here ^^^) # @@ -844,6 +850,7 @@ done %patch180 -p1 # 00181: not for python3 # 00182: upstream as of Python 3.3.2 +%patch183 -p1 # Currently (2010-01-15), http://docs.python.org/library is for 2.6, and there # are many differences between 2.6 and the Python 3 library. @@ -1684,6 +1691,9 @@ rm -fr %{buildroot} # ====================================================== %changelog +* Mon May 20 2013 Bohuslav Kabrda - 3.3.2-2 +- Add patch for CVE-2013-2099 (rhbz#963261). + * Thu May 16 2013 Bohuslav Kabrda - 3.3.2-1 - Updated to Python 3.3.2. - Refreshed patches: 153 (gdb test noise)