From 9b97d583555fc923d1f719358fec128ac1bf787a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Arkadiusz=20Mi=C5=9Bkiewicz?= Date: Thu, 3 Jan 2019 09:44:32 +0100 Subject: [PATCH] - up to 3.7.2 --- git.patch | 613 ---------------------------- python3-no_cmdline_tests.patch | 7 +- python3-tests_with_pythonpath.patch | 6 +- python3.spec | 9 +- 4 files changed, 10 insertions(+), 625 deletions(-) delete mode 100644 git.patch diff --git a/git.patch b/git.patch deleted file mode 100644 index c537275..0000000 --- a/git.patch +++ /dev/null @@ -1,613 +0,0 @@ -commit 4ec9f64e07c8f397ad6699f8b99843846c219588 -Author: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> -Date: Fri Oct 19 16:14:42 2018 -0700 - - bpo-34824: Fix a possible NULL pointer dereference in _ssl.c (GH-9606) (GH-9743) - - On failure, _PyBytes_Resize() will deallocate the bytes object and set - "result" to NULL. - - https://bugs.python.org/issue34824 - (cherry picked from commit 365ad2ead5bbaf7a3b18648ffa36e819559d3f75) - - Co-authored-by: Zackery Spytz - -diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-09-27-11-10-02.bpo-34824.VLlCaU.rst b/Misc/NEWS.d/next/Core and Builtins/2018-09-27-11-10-02.bpo-34824.VLlCaU.rst -new file mode 100644 -index 0000000000..fe95b8973c ---- /dev/null -+++ b/Misc/NEWS.d/next/Core and Builtins/2018-09-27-11-10-02.bpo-34824.VLlCaU.rst -@@ -0,0 +1,2 @@ -+Fix a possible null pointer dereference in Modules/_ssl.c. Patch by Zackery -+Spytz. -diff --git a/Modules/_ssl.c b/Modules/_ssl.c -index 4253e2a772..f9d1b8c308 100644 ---- a/Modules/_ssl.c -+++ b/Modules/_ssl.c -@@ -4711,12 +4711,17 @@ _ssl_MemoryBIO_read_impl(PySSLMemoryBIO *self, int len) - return result; - - nbytes = BIO_read(self->bio, PyBytes_AS_STRING(result), len); -- /* There should never be any short reads but check anyway. */ -- if ((nbytes < len) && (_PyBytes_Resize(&result, len) < 0)) { -+ if (nbytes < 0) { - Py_DECREF(result); -+ _setSSLError(NULL, 0, __FILE__, __LINE__); - return NULL; - } - -+ /* There should never be any short reads but check anyway. */ -+ if (nbytes < len) { -+ _PyBytes_Resize(&result, nbytes); -+ } -+ - return result; - } - -commit 7f34d550231e047c88a1817b58bda03a33817490 -Author: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> -Date: Sun Oct 21 05:55:52 2018 -0700 - - bpo-34973: Fix crash in bytes constructor. (GH-9841) - - - Constructing bytes from mutating list could cause a crash. - (cherry picked from commit 914f9a078f997e58cfcfabcbb30fafdd1f277bef) - - Co-authored-by: Serhiy Storchaka - -diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py -index b9c5b628c4..145411efbb 100644 ---- a/Lib/test/test_bytes.py -+++ b/Lib/test/test_bytes.py -@@ -113,6 +113,23 @@ class BaseBytesTest: - b = self.type2test([1, 2, 3]) - self.assertEqual(b, b"\x01\x02\x03") - -+ def test_from_mutating_list(self): -+ # Issue #34973: Crash in bytes constructor with mutating list. -+ class X: -+ def __index__(self): -+ a.clear() -+ return 42 -+ a = [X(), X()] -+ self.assertEqual(bytes(a), b'*') -+ -+ class Y: -+ def __index__(self): -+ if len(a) < 1000: -+ a.append(self) -+ return 42 -+ a = [Y()] -+ self.assertEqual(bytes(a), b'*' * 1000) # should not crash -+ - def test_from_index(self): - b = self.type2test([Indexable(), Indexable(1), Indexable(254), - Indexable(255)]) -diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-10-13-16-42-03.bpo-34973.B5M-3g.rst b/Misc/NEWS.d/next/Core and Builtins/2018-10-13-16-42-03.bpo-34973.B5M-3g.rst -new file mode 100644 -index 0000000000..6e403cd4ce ---- /dev/null -+++ b/Misc/NEWS.d/next/Core and Builtins/2018-10-13-16-42-03.bpo-34973.B5M-3g.rst -@@ -0,0 +1,2 @@ -+Fixed crash in :func:`bytes` when the :class:`list` argument is mutated -+while it is iterated. -diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c -index 5b62842093..711faba645 100644 ---- a/Objects/bytesobject.c -+++ b/Objects/bytesobject.c -@@ -2640,49 +2640,83 @@ fail: - return NULL; - } - --#define _PyBytes_FROM_LIST_BODY(x, GET_ITEM) \ -- do { \ -- PyObject *bytes; \ -- Py_ssize_t i; \ -- Py_ssize_t value; \ -- char *str; \ -- PyObject *item; \ -- \ -- bytes = PyBytes_FromStringAndSize(NULL, Py_SIZE(x)); \ -- if (bytes == NULL) \ -- return NULL; \ -- str = ((PyBytesObject *)bytes)->ob_sval; \ -- \ -- for (i = 0; i < Py_SIZE(x); i++) { \ -- item = GET_ITEM((x), i); \ -- value = PyNumber_AsSsize_t(item, NULL); \ -- if (value == -1 && PyErr_Occurred()) \ -- goto error; \ -- \ -- if (value < 0 || value >= 256) { \ -- PyErr_SetString(PyExc_ValueError, \ -- "bytes must be in range(0, 256)"); \ -- goto error; \ -- } \ -- *str++ = (char) value; \ -- } \ -- return bytes; \ -- \ -- error: \ -- Py_DECREF(bytes); \ -- return NULL; \ -- } while (0) -- - static PyObject* - _PyBytes_FromList(PyObject *x) - { -- _PyBytes_FROM_LIST_BODY(x, PyList_GET_ITEM); -+ Py_ssize_t i, size = PyList_GET_SIZE(x); -+ Py_ssize_t value; -+ char *str; -+ PyObject *item; -+ _PyBytesWriter writer; -+ -+ _PyBytesWriter_Init(&writer); -+ str = _PyBytesWriter_Alloc(&writer, size); -+ if (str == NULL) -+ return NULL; -+ writer.overallocate = 1; -+ size = writer.allocated; -+ -+ for (i = 0; i < PyList_GET_SIZE(x); i++) { -+ item = PyList_GET_ITEM(x, i); -+ Py_INCREF(item); -+ value = PyNumber_AsSsize_t(item, NULL); -+ Py_DECREF(item); -+ if (value == -1 && PyErr_Occurred()) -+ goto error; -+ -+ if (value < 0 || value >= 256) { -+ PyErr_SetString(PyExc_ValueError, -+ "bytes must be in range(0, 256)"); -+ goto error; -+ } -+ -+ if (i >= size) { -+ str = _PyBytesWriter_Resize(&writer, str, size+1); -+ if (str == NULL) -+ return NULL; -+ size = writer.allocated; -+ } -+ *str++ = (char) value; -+ } -+ return _PyBytesWriter_Finish(&writer, str); -+ -+ error: -+ _PyBytesWriter_Dealloc(&writer); -+ return NULL; - } - - static PyObject* - _PyBytes_FromTuple(PyObject *x) - { -- _PyBytes_FROM_LIST_BODY(x, PyTuple_GET_ITEM); -+ PyObject *bytes; -+ Py_ssize_t i, size = PyTuple_GET_SIZE(x); -+ Py_ssize_t value; -+ char *str; -+ PyObject *item; -+ -+ bytes = PyBytes_FromStringAndSize(NULL, size); -+ if (bytes == NULL) -+ return NULL; -+ str = ((PyBytesObject *)bytes)->ob_sval; -+ -+ for (i = 0; i < size; i++) { -+ item = PyTuple_GET_ITEM(x, i); -+ value = PyNumber_AsSsize_t(item, NULL); -+ if (value == -1 && PyErr_Occurred()) -+ goto error; -+ -+ if (value < 0 || value >= 256) { -+ PyErr_SetString(PyExc_ValueError, -+ "bytes must be in range(0, 256)"); -+ goto error; -+ } -+ *str++ = (char) value; -+ } -+ return bytes; -+ -+ error: -+ Py_DECREF(bytes); -+ return NULL; - } - - static PyObject * -commit c46f0423a42c46cf62d12c300ec36a848f8ba72c -Author: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> -Date: Tue Oct 23 12:45:44 2018 -0700 - - Fix error handling bugs in _elementtree.c. (GH-10060) - - - References could leak, NULL could be dereferenced, and the Expat parser could - be double freed when some errors raised. - (cherry picked from commit 9f3ed3e213b30059087d059a7d1d3b2527fa8654) - - Co-authored-by: Zackery Spytz - -diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c -index d13c6dd4db..3118b55c87 100644 ---- a/Modules/_elementtree.c -+++ b/Modules/_elementtree.c -@@ -336,6 +336,9 @@ static PyObject* - get_attrib_from_keywords(PyObject *kwds) - { - PyObject *attrib_str = PyUnicode_FromString("attrib"); -+ if (attrib_str == NULL) { -+ return NULL; -+ } - PyObject *attrib = PyDict_GetItem(kwds, attrib_str); - - if (attrib) { -@@ -356,10 +359,10 @@ get_attrib_from_keywords(PyObject *kwds) - - Py_DECREF(attrib_str); - -- /* attrib can be NULL if PyDict_New failed */ -- if (attrib) -- if (PyDict_Update(attrib, kwds) < 0) -- return NULL; -+ if (attrib != NULL && PyDict_Update(attrib, kwds) < 0) { -+ Py_DECREF(attrib); -+ return NULL; -+ } - return attrib; - } - -@@ -579,10 +582,9 @@ subelement(PyObject *self, PyObject *args, PyObject *kwds) - attrib = PyDict_Copy(attrib); - if (!attrib) - return NULL; -- if (kwds) { -- if (PyDict_Update(attrib, kwds) < 0) { -- return NULL; -- } -+ if (kwds != NULL && PyDict_Update(attrib, kwds) < 0) { -+ Py_DECREF(attrib); -+ return NULL; - } - } else if (kwds) { - /* have keyword args */ -@@ -1857,7 +1859,6 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) - * scheduled for removal. - */ - if (!(recycle = PyList_New(slicelen))) { -- PyErr_NoMemory(); - return -1; - } - -@@ -1897,7 +1898,7 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) - self->extra->length -= slicelen; - - /* Discard the recycle list with all the deleted sub-elements */ -- Py_XDECREF(recycle); -+ Py_DECREF(recycle); - return 0; - } - -@@ -3352,7 +3353,6 @@ _elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *html, - if (!target) { - Py_CLEAR(self->entity); - Py_CLEAR(self->names); -- EXPAT(ParserFree)(self->parser); - return -1; - } - } -commit da15389fddb85cf8a97b81e75de7d77b5f505b56 -Author: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> -Date: Wed Oct 31 02:31:29 2018 -0700 - - Fix a possible crash in range.__reversed__(). (GH-10252) - - (cherry picked from commit c9a6168924ffa4f3f78175998b392fe23d3edc50) - - Co-authored-by: Zackery Spytz - -diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c -index e4f778b1f8..037be870e3 100644 ---- a/Objects/rangeobject.c -+++ b/Objects/rangeobject.c -@@ -1154,6 +1154,7 @@ long_range: - it = PyObject_New(longrangeiterobject, &PyLongRangeIter_Type); - if (it == NULL) - return NULL; -+ it->index = it->start = it->step = NULL; - - /* start + (len - 1) * step */ - it->len = range->length; -commit 192c54713b4c67a8d14b2d98056771feba40ca37 -Author: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> -Date: Wed Oct 31 16:45:42 2018 -0700 - - bpo-26558: Fix Py_FatalError() with GIL released (GH-10267) - - - Don't call _Py_FatalError_PrintExc() nor flush_std_files() if the - current thread doesn't hold the GIL, or if the current thread - has no Python state thread. - (cherry picked from commit 3a228ab17c2a9cffd1a2f15f30d6209768de20a6) - - Co-authored-by: Victor Stinner - -diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c -index c01b21ffeb..86f95de833 100644 ---- a/Python/pylifecycle.c -+++ b/Python/pylifecycle.c -@@ -2015,12 +2015,6 @@ _Py_FatalError_PrintExc(int fd) - PyObject *exception, *v, *tb; - int has_tb; - -- if (PyThreadState_GET() == NULL) { -- /* The GIL is released: trying to acquire it is likely to deadlock, -- just give up. */ -- return 0; -- } -- - PyErr_Fetch(&exception, &v, &tb); - if (exception == NULL) { - /* No current exception */ -@@ -2125,9 +2119,30 @@ fatal_error(const char *prefix, const char *msg, int status) - fputs("\n", stderr); - fflush(stderr); /* it helps in Windows debug build */ - -- /* Print the exception (if an exception is set) with its traceback, -- * or display the current Python stack. */ -- if (!_Py_FatalError_PrintExc(fd)) { -+ /* Check if the current thread has a Python thread state -+ and holds the GIL */ -+ PyThreadState *tss_tstate = PyGILState_GetThisThreadState(); -+ if (tss_tstate != NULL) { -+ PyThreadState *tstate = PyThreadState_GET(); -+ if (tss_tstate != tstate) { -+ /* The Python thread does not hold the GIL */ -+ tss_tstate = NULL; -+ } -+ } -+ else { -+ /* Py_FatalError() has been called from a C thread -+ which has no Python thread state. */ -+ } -+ int has_tstate_and_gil = (tss_tstate != NULL); -+ -+ if (has_tstate_and_gil) { -+ /* If an exception is set, print the exception with its traceback */ -+ if (!_Py_FatalError_PrintExc(fd)) { -+ /* No exception is set, or an exception is set without traceback */ -+ _Py_FatalError_DumpTracebacks(fd); -+ } -+ } -+ else { - _Py_FatalError_DumpTracebacks(fd); - } - -@@ -2138,7 +2153,7 @@ fatal_error(const char *prefix, const char *msg, int status) - _PyFaulthandler_Fini(); - - /* Check if the current Python thread hold the GIL */ -- if (PyThreadState_GET() != NULL) { -+ if (has_tstate_and_gil) { - /* Flush sys.stdout and sys.stderr */ - flush_std_files(); - } -commit f16ebcd460aaeb8d6b31db317d22f5ed68afbcc8 -Author: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> -Date: Thu Nov 8 18:13:14 2018 -0800 - - bpo-35193: Fix an off by one error in the RETURN_VALUE case. (GH-10418) - - - Fix an off by one error in the peephole optimizer when checking for unreachable code beyond a return. - - Do a bounds check within find_op so it can return before going past the end as a safety measure. - - https://github.com/python/cpython/commit/7db3c488335168993689ddae5914a28e16188447GH-diff-a33329ae6ae0bb295d742f0caf93c137 - introduced this off by one error while fixing another one nearby. - - This bug was shipped in all Python 3.6 and 3.7 releases. - - The included unittest won't fail unless you do a clang msan build. - (cherry picked from commit 49fa4a9f1ef387e16596f271414c855339eadf09) - - Co-authored-by: Gregory P. Smith - -diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py -index d8a57e5e09..5ac1c5f271 100644 ---- a/Lib/test/test_compile.py -+++ b/Lib/test/test_compile.py -@@ -1,3 +1,4 @@ -+import dis - import math - import os - import unittest -@@ -621,6 +622,24 @@ if 1: - self.check_constant(f1, frozenset({0})) - self.assertTrue(f1(0)) - -+ # This is a regression test for a CPython specific peephole optimizer -+ # implementation bug present in a few releases. It's assertion verifies -+ # that peephole optimization was actually done though that isn't an -+ # indication of the bugs presence or not (crashing is). -+ @support.cpython_only -+ def test_peephole_opt_unreachable_code_array_access_in_bounds(self): -+ """Regression test for issue35193 when run under clang msan.""" -+ def unused_code_at_end(): -+ return 3 -+ raise RuntimeError("unreachable") -+ # The above function definition will trigger the out of bounds -+ # bug in the peephole optimizer as it scans opcodes past the -+ # RETURN_VALUE opcode. This does not always crash an interpreter. -+ # When you build with the clang memory sanitizer it reliably aborts. -+ self.assertEqual( -+ 'RETURN_VALUE', -+ list(dis.get_instructions(unused_code_at_end))[-1].opname) -+ - def test_dont_merge_constants(self): - # Issue #25843: compile() must not merge constants which are equal - # but have a different type. -diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-11-08-15-00-58.bpo-35193.HzPS6R.rst b/Misc/NEWS.d/next/Core and Builtins/2018-11-08-15-00-58.bpo-35193.HzPS6R.rst -new file mode 100644 -index 0000000000..dddebe1670 ---- /dev/null -+++ b/Misc/NEWS.d/next/Core and Builtins/2018-11-08-15-00-58.bpo-35193.HzPS6R.rst -@@ -0,0 +1,3 @@ -+Fix an off by one error in the bytecode peephole optimizer where it could read -+bytes beyond the end of bounds of an array when removing unreachable code. -+This bug was present in every release of Python 3.6 and 3.7 until now. -diff --git a/Python/peephole.c b/Python/peephole.c -index 76a0edbcc2..a3b078fdf1 100644 ---- a/Python/peephole.c -+++ b/Python/peephole.c -@@ -50,9 +50,9 @@ lastn_const_start(const _Py_CODEUNIT *codestr, Py_ssize_t i, Py_ssize_t n) - - /* Scans through EXTENDED ARGs, seeking the index of the effective opcode */ - static Py_ssize_t --find_op(const _Py_CODEUNIT *codestr, Py_ssize_t i) -+find_op(const _Py_CODEUNIT *codestr, Py_ssize_t codelen, Py_ssize_t i) - { -- while (_Py_OPCODE(codestr[i]) == EXTENDED_ARG) { -+ while (i < codelen && _Py_OPCODE(codestr[i]) == EXTENDED_ARG) { - i++; - } - return i; -@@ -128,8 +128,9 @@ copy_op_arg(_Py_CODEUNIT *codestr, Py_ssize_t i, unsigned char op, - Called with codestr pointing to the first LOAD_CONST. - */ - static Py_ssize_t --fold_tuple_on_constants(_Py_CODEUNIT *codestr, Py_ssize_t c_start, -- Py_ssize_t opcode_end, PyObject *consts, int n) -+fold_tuple_on_constants(_Py_CODEUNIT *codestr, Py_ssize_t codelen, -+ Py_ssize_t c_start, Py_ssize_t opcode_end, -+ PyObject *consts, int n) - { - /* Pre-conditions */ - assert(PyList_CheckExact(consts)); -@@ -142,7 +143,7 @@ fold_tuple_on_constants(_Py_CODEUNIT *codestr, Py_ssize_t c_start, - - for (Py_ssize_t i = 0, pos = c_start; i < n; i++, pos++) { - assert(pos < opcode_end); -- pos = find_op(codestr, pos); -+ pos = find_op(codestr, codelen, pos); - assert(_Py_OPCODE(codestr[pos]) == LOAD_CONST); - - unsigned int arg = get_arg(codestr, pos); -@@ -267,7 +268,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, - goto exitError; - assert(PyList_Check(consts)); - -- for (i=find_op(codestr, 0) ; i= 1 && _Py_OPCODE(codestr[op_start-1]) == EXTENDED_ARG) { -@@ -305,7 +306,8 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, - if (j > 0 && lastlc >= j) { - h = lastn_const_start(codestr, op_start, j); - if (ISBASICBLOCK(blocks, h, op_start)) { -- h = fold_tuple_on_constants(codestr, h, i+1, consts, j); -+ h = fold_tuple_on_constants(codestr, codelen, -+ h, i+1, consts, j); - break; - } - } -@@ -342,7 +344,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, - case JUMP_IF_FALSE_OR_POP: - case JUMP_IF_TRUE_OR_POP: - h = get_arg(codestr, i) / sizeof(_Py_CODEUNIT); -- tgt = find_op(codestr, h); -+ tgt = find_op(codestr, codelen, h); - - j = _Py_OPCODE(codestr[tgt]); - if (CONDITIONAL_JUMP(j)) { -@@ -383,7 +385,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, - case SETUP_WITH: - case SETUP_ASYNC_WITH: - h = GETJUMPTGT(codestr, i); -- tgt = find_op(codestr, h); -+ tgt = find_op(codestr, codelen, h); - /* Replace JUMP_* to a RETURN into just a RETURN */ - if (UNCONDITIONAL_JUMP(opcode) && - _Py_OPCODE(codestr[tgt]) == RETURN_VALUE) { -@@ -412,7 +414,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, - } - if (h > i + 1) { - fill_nops(codestr, i + 1, h); -- nexti = find_op(codestr, h); -+ nexti = find_op(codestr, codelen, h); - } - break; - } -commit 9fbcb1402efab4e287f25145a69ba14c9c6dbce9 -Author: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> -Date: Tue Nov 13 16:39:36 2018 -0800 - - [3.7] bpo-35214: Fix OOB memory access in unicode escape parser (GH-10506) (GH-10522) - - - - Discovered using clang's MemorySanitizer when it ran python3's - test_fstring test_misformed_unicode_character_name. - - An msan build will fail by simply executing: ./python -c 'u"\N"' - (cherry picked from commit 746b2d35ea47005054ed774fecaed64fab803d7d) - - - Co-authored-by: Gregory P. Smith - - - https://bugs.python.org/issue35214 - -diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-11-13-00-40-35.bpo-35214.OQBjph.rst b/Misc/NEWS.d/next/Core and Builtins/2018-11-13-00-40-35.bpo-35214.OQBjph.rst -new file mode 100644 -index 0000000000..d462c97d80 ---- /dev/null -+++ b/Misc/NEWS.d/next/Core and Builtins/2018-11-13-00-40-35.bpo-35214.OQBjph.rst -@@ -0,0 +1,3 @@ -+Fixed an out of bounds memory access when parsing a truncated unicode -+escape sequence at the end of a string such as ``'\N'``. It would read -+one byte beyond the end of the memory allocation. -diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c -index fe833a76ea..71eb654095 100644 ---- a/Objects/unicodeobject.c -+++ b/Objects/unicodeobject.c -@@ -6042,7 +6042,7 @@ _PyUnicode_DecodeUnicodeEscape(const char *s, - } - - message = "malformed \\N character escape"; -- if (*s == '{') { -+ if (s < end && *s == '{') { - const char *start = ++s; - size_t namelen; - /* look for the closing brace */ -commit b5ea5e57f5dd23e1db695dda8bf3f6142ed9074f -Author: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> -Date: Thu Nov 15 01:25:34 2018 -0800 - - Fix a possible reference leak in _socket.getaddrinfo(). (GH-10543) - - - "single" needs to be decrefed if PyList_Append() fails. - (cherry picked from commit 4c596d54aa6a55e9d2a3db78891e656ebbfb63c8) - - Co-authored-by: Zackery Spytz - -diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c -index eeade2ecad..ddb1c4364b 100644 ---- a/Modules/socketmodule.c -+++ b/Modules/socketmodule.c -@@ -6269,9 +6269,11 @@ socket_getaddrinfo(PyObject *self, PyObject *args, PyObject* kwargs) - if (single == NULL) - goto err; - -- if (PyList_Append(all, single)) -+ if (PyList_Append(all, single)) { -+ Py_DECREF(single); - goto err; -- Py_XDECREF(single); -+ } -+ Py_DECREF(single); - } - Py_XDECREF(idna); - if (res0) diff --git a/python3-no_cmdline_tests.patch b/python3-no_cmdline_tests.patch index ad85bff..392c63a 100644 --- a/python3-no_cmdline_tests.patch +++ b/python3-no_cmdline_tests.patch @@ -1,13 +1,12 @@ diff -Nur Python-3.3.1.orig/Lib/test/test_compileall.py Python-3.3.1/Lib/test/test_compileall.py --- Python-3.3.1.orig/Lib/test/test_compileall.py 2013-04-06 08:41:41.000000000 +0100 +++ Python-3.3.1/Lib/test/test_compileall.py 2013-04-07 19:39:23.449157629 +0100 -@@ -130,7 +130,7 @@ - finally: +@@ -233,6 +233,7 @@ class EncodingTest(unittest.TestCase): sys.stdout = orig_stdout -- + +@unittest.skipUnless(support.is_resource_enabled("cmdline"), "python cmdline tests disabled") - class CommandLineTests(unittest.TestCase): + class CommandLineTestsBase: """Test compileall's CLI.""" diff -Nur Python-3.3.1.orig/Lib/test/test_warnings/__init__.py Python-3.3.1/Lib/test/test_warnings/__init__.py diff --git a/python3-tests_with_pythonpath.patch b/python3-tests_with_pythonpath.patch index d2bc777..ef74c4d 100644 --- a/python3-tests_with_pythonpath.patch +++ b/python3-tests_with_pythonpath.patch @@ -49,14 +49,14 @@ diff -dur -x '*~' Python-3.5.0.orig/Lib/test/test_compileall.py Python-3.5.0/Lib def test_no_args_compiles_path(self): # Note that -l is implied for the no args case. bazfn = script_helper.make_script(self.directory, 'baz', '') -@@ -214,6 +215,7 @@ +@@ -220,6 +220,7 @@ class CommandLineTestsBase: self.assertNotCompiled(self.initfn) self.assertNotCompiled(self.barfn) + @unittest.skipIf("PYTHONPATH" in os.environ, "$PYTHONPATH set") + @without_source_date_epoch # timestamp invalidation test def test_no_args_respects_force_flag(self): - bazfn = script_helper.make_script(self.directory, 'baz', '') - self.assertRunOK(PYTHONPATH=self.directory) + self._skip_if_sys_path_not_writable() @@ -230,6 +232,7 @@ mtime2 = os.stat(pycpath).st_mtime self.assertNotEqual(mtime, mtime2) diff --git a/python3.spec b/python3.spec index c970c58..31522f3 100644 --- a/python3.spec +++ b/python3.spec @@ -41,13 +41,13 @@ Summary(ru.UTF-8): Язык программирования очень высо Summary(tr.UTF-8): X arayüzlü, yüksek düzeyli, kabuk yorumlayıcı dili Summary(uk.UTF-8): Мова програмування дуже високого рівня з X-інтерфейсом Name: python3 -Version: %{py_ver}.1 -Release: 3 +Version: %{py_ver}.2 +Release: 1 Epoch: 1 License: PSF Group: Development/Languages/Python Source0: https://www.python.org/ftp/python/%{version}/Python-%{version}.tar.xz -# Source0-md5: 0a57e9022c07fad3dadb2eef58568edb +# Source0-md5: df6ec36011808205beda239c72f947cb Source1: pyconfig.h.in Patch0: %{name}-pythonpath.patch Patch1: %{name}-ac_fixes.patch @@ -63,7 +63,6 @@ Patch11: %{name}-installcompile.patch # https://bugs.python.org/file21896/nonexistent_user.patch Patch12: nonexistent_user.patch Patch13: %{name}-no-randomize-tests.patch -Patch14: git.patch URL: https://www.python.org/ BuildRequires: autoconf >= 2.65 BuildRequires: automake @@ -495,7 +494,6 @@ Moduły testowe dla Pythona. %patch11 -p1 %patch12 -p1 %patch13 -p1 -%patch14 -p1 %{__rm} -r Modules/expat @@ -1272,6 +1270,7 @@ rm -rf $RPM_BUILD_ROOT %attr(755,root,root) %{_libdir}/libpython3.so %{py_incdir}/*.h %exclude %{py_incdir}/pyconfig.h +%{py_incdir}/internal %attr(755,root,root) %{py_libdir}/config-%{py_platform}/makesetup %attr(755,root,root) %{py_libdir}/config-%{py_platform}/install-sh %{py_libdir}/config-%{py_platform}/config.c -- 2.44.0