- update to 2.7.14
* dozens of bugfixes, see NEWS for details * fixed possible integer overflow in PyString_DecodeEscape (CVE-2017-1000158, bsc#1068664) * fixed segfaults with dict mutated during search * fixed possible free-after-use problems with buffer objects with custom indexing * fixed urllib.splithost to correctly parse fragments (bpo-30500) - drop upstreamed python-2.7.13-overflow_check.patch - drop unneeded python-2.7.12-makeopcode.patch - drop upstreamed 0001-2.7-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3094.patch - update to 2.7.14 * dozens of bugfixes, see NEWS for details * fixed possible integer overflow in PyString_DecodeEscape (CVE-2017-1000158, bsc#1068664) * fixed segfaults with dict mutated during search * fixed possible free-after-use problems with buffer objects with custom indexing * fixed urllib.splithost to correctly parse fragments (bpo-30500) - drop upstreamed python-2.7.13-overflow_check.patch - drop unneeded python-2.7.12-makeopcode.patch - drop upstreamed 0001-2.7-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3094.patch - update to 2.7.14 * dozens of bugfixes, see NEWS for details * fixed possible integer overflow in PyString_DecodeEscape (CVE-2017-1000158, bsc#1068664) * fixed segfaults with dict mutated during search * fixed possible free-after-use problems with buffer objects with custom indexing * fixed urllib.splithost to correctly parse fragments (bpo-30500) - drop upstreamed python-2.7.13-overflow_check.patch - drop unneeded python-2.7.12-makeopcode.patch - drop upstreamed 0001-2.7-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3094.patch OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python?expand=0&rev=213
This commit is contained in:
parent
1482566264
commit
70d78d4e2f
@ -1,60 +0,0 @@
|
||||
From 05b7d9c6675b71d17f5fcf379b3888fba431f14e Mon Sep 17 00:00:00 2001
|
||||
From: Christian Heimes <christian@python.org>
|
||||
Date: Tue, 15 Aug 2017 10:55:03 +0200
|
||||
Subject: [PATCH] [2.7] bpo-30714: ALPN changes for OpenSSL 1.1.0f (#3094)
|
||||
|
||||
OpenSSL 1.1.0 to 1.1.0e aborted the handshake when server and client
|
||||
could not agree on a protocol using ALPN. OpenSSL 1.1.0f changed that.
|
||||
The most recent version now behaves like OpenSSL 1.0.2 again. The ALPN
|
||||
callback can pretend to not been set.
|
||||
|
||||
See https://github.com/openssl/openssl/pull/3158 for more details
|
||||
|
||||
Signed-off-by: Christian Heimes <christian@python.org>
|
||||
(cherry picked from commit a5c1bab352671e043645163ca50c5211aa657acd)
|
||||
---
|
||||
Doc/library/ssl.rst | 5 +++--
|
||||
Lib/test/test_ssl.py | 5 +++--
|
||||
Misc/NEWS.d/next/Tests/2017-07-25-15-27-44.bpo-30715.Sp7bTF.rst | 2 ++
|
||||
3 files changed, 8 insertions(+), 4 deletions(-)
|
||||
create mode 100644 Misc/NEWS.d/next/Tests/2017-07-25-15-27-44.bpo-30715.Sp7bTF.rst
|
||||
|
||||
Index: Python-2.7.13/Doc/library/ssl.rst
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Doc/library/ssl.rst 2016-12-17 21:05:05.000000000 +0100
|
||||
+++ Python-2.7.13/Doc/library/ssl.rst 2017-09-14 16:14:26.733996348 +0200
|
||||
@@ -1158,8 +1158,9 @@ to speed up repeated connections from th
|
||||
This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is
|
||||
False.
|
||||
|
||||
- OpenSSL 1.1.0+ will abort the handshake and raise :exc:`SSLError` when
|
||||
- both sides support ALPN but cannot agree on a protocol.
|
||||
+ OpenSSL 1.1.0 to 1.1.0e will abort the handshake and raise :exc:`SSLError`
|
||||
+ when both sides support ALPN but cannot agree on a protocol. 1.1.0f+
|
||||
+ behaves like 1.0.2, :meth:`SSLSocket.selected_alpn_protocol` returns None.
|
||||
|
||||
.. versionadded:: 2.7.10
|
||||
|
||||
Index: Python-2.7.13/Lib/test/test_ssl.py
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Lib/test/test_ssl.py 2016-12-17 21:05:06.000000000 +0100
|
||||
+++ Python-2.7.13/Lib/test/test_ssl.py 2017-09-14 16:14:26.733996348 +0200
|
||||
@@ -2963,8 +2963,9 @@ else:
|
||||
except ssl.SSLError as e:
|
||||
stats = e
|
||||
|
||||
- if expected is None and IS_OPENSSL_1_1:
|
||||
- # OpenSSL 1.1.0 raises handshake error
|
||||
+ if (expected is None and IS_OPENSSL_1_1
|
||||
+ and ssl.OPENSSL_VERSION_INFO < (1, 1, 0, 6)):
|
||||
+ # OpenSSL 1.1.0 to 1.1.0e raises handshake error
|
||||
self.assertIsInstance(stats, ssl.SSLError)
|
||||
else:
|
||||
msg = "failed trying %s (s) and %s (c).\n" \
|
||||
Index: Python-2.7.13/Misc/NEWS.d/next/Tests/2017-07-25-15-27-44.bpo-30715.Sp7bTF.rst
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ Python-2.7.13/Misc/NEWS.d/next/Tests/2017-07-25-15-27-44.bpo-30715.Sp7bTF.rst 2017-09-14 16:14:26.733996348 +0200
|
||||
@@ -0,0 +1,2 @@
|
||||
+Address ALPN callback changes for OpenSSL 1.1.0f. The latest version behaves
|
||||
+like OpenSSL 1.0.2 and no longer aborts handshake.
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:35d543986882f78261f97787fd3e06274bfa6df29fac9b4a94f73930ff98f731
|
||||
size 12495628
|
@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCAAGBQJYVZxZAAoJEATDZ8IYrdT/YCoP/103Idy0ETFqOE+Vt7vLI2cU
|
||||
Ct0cyPy5ZBRIjZmcav8R2rKPKC1EjE9BfsJDdPevm2drBu18IjP59fqL47unCQ37
|
||||
luoUb4vOCjuSu0NesTsVPW+Bw0Imr2Qs3UJeuIaHP/KFjg/1kjOIxOhzk0AAZa/n
|
||||
mWBGzOcCJ8jRAhdWH9YHT93QwmKG4zaqxlmF6c7CrbgRVUJeh6kUlCJOiFXCkkNW
|
||||
Nu2fCOvh1+bMtmMsZsbb6IZeccyJOn4l+EqbzasX1egerbw2spC6ECMkhiZT6RRI
|
||||
mQQ2fmdYDAwn+CUIrYra2rxMqlAo9rRIp43A8kWyVfOAnUlljHhjyS02zmavrs8I
|
||||
9zyM1Fofu20q0Fk9ktX9vPZU6fqum2zbYFzBZkt/qYrAEiV9iCfztyws3+65qgYv
|
||||
dzw4jWM9oALzW2kCPD4GZOO7QpfPXjUec63bara+orO82Ifeq2qT7Zob+bBjd943
|
||||
A1skaO7X5Qhcfem1bdS3ZvgNMgwCqggNvXwbhDTY7Fk4zxCemjFI5JTe531wUKGt
|
||||
Kh1aAFQblAea6CmVC2GhhQ6Lmrnp1S+OyJaUIrT3ALW1sF1Iqy+wLVc6ltKH1fje
|
||||
57m2z/qmn9X28VF3de7Tg8mvDwgQthJWG/X9TYeLa7cHzJ3od3w+7I7jI3dMigdM
|
||||
RV2cSjUPE9UD9P1y+CYo
|
||||
=dR4B
|
||||
-----END PGP SIGNATURE-----
|
3
Python-2.7.14.tar.xz
Normal file
3
Python-2.7.14.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:71ffb26e09e78650e424929b2b457b9c912ac216576e6bd9e7d204ed03296a66
|
||||
size 12576112
|
16
Python-2.7.14.tar.xz.asc
Normal file
16
Python-2.7.14.tar.xz.asc
Normal file
@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABCAAGBQJZvWXWAAoJEATDZ8IYrdT/8IgQAJwkDGd3oUY2WWhlh7kUnOIs
|
||||
X0hEqSvMM2itL/DpNVTTcCyviqPXPxH4XkCn6E4g9cPiMKYID5KL8V5CK+rSHaZY
|
||||
ckJ9FKZ5Hv6bF0hEF2gUN0vtd9w2qh7lnvjGLtMcXwfe3cN1qg6X07+a5dZvxYWw
|
||||
EhPtdEHi2u+2UBlhEjCGb2njZ9SDbNqx0KjcuO0hTxEfzpqWCTzIwNJwQS8RYX1r
|
||||
LBdqID+xQqLaX19tAkyxa3F8F1bF1esvEWJyyLy1LVvAfL8QYzAObOYOb+dlohUU
|
||||
/BCCP2J8Nn+O49vF4VSo35xU2ngHajDKL2xMMes5JLd5oVHEWfdATADv3gXNINy9
|
||||
9zQowUNwV/bsQFHncHl1i6O1jAZbiSeYw8+ZVo6H2jxWwTAbEgMmx5oldzqB8FiQ
|
||||
kDGEr0130686GrkOFVYI2Ttj4bIhminwCJk3/w22Pe6sxh5ZbFKj0gnQ1vLhzXPy
|
||||
EH52KcOi+9kn3w6yYQmOZHkwheY1Gkgl23VifkZVCkz7iZZxlbD2WyuzvDPh9U6o
|
||||
aVzbnOaBniNeAYcXcb8GGVCz5L4um75BpTtky2eufZhf377HfmCZ9Xo38nuWqN4T
|
||||
qZj+bto4UtWcbQXVi+dz//v1jVPIOWbhS/TTDI/Ht45m2gktfZegB/m6NwBnvtuC
|
||||
SgD09Q4KFLCWJKp62vNI
|
||||
=FnWM
|
||||
-----END PGP SIGNATURE-----
|
@ -1,13 +0,0 @@
|
||||
Index: Python-2.7.12/Makefile.pre.in
|
||||
===================================================================
|
||||
--- Python-2.7.12.orig/Makefile.pre.in
|
||||
+++ Python-2.7.12/Makefile.pre.in
|
||||
@@ -319,7 +319,7 @@ OPCODETARGETS_H= \
|
||||
$(srcdir)/Python/opcode_targets.h
|
||||
|
||||
OPCODETARGETGEN= \
|
||||
- $(srcdir)/Python/makeopcodetargets.py
|
||||
+ ./python $(srcdir)/Python/makeopcodetargets.py
|
||||
|
||||
OPCODETARGETGEN_FILES= \
|
||||
$(OPCODETARGETGEN) $(srcdir)/Lib/opcode.py
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:cba0fce8f70444fe87405efcf005a0ea408935cbb859862eda3bd2df1177b0ce
|
||||
size 10712181
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:65832a14df4aa8dc2887e294de4d8abefbc4c9466af12a0b8315acf6faec7d8a
|
||||
size 10768393
|
@ -1,300 +0,0 @@
|
||||
Index: Python-2.7.13/Objects/unicodeobject.c
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Objects/unicodeobject.c
|
||||
+++ Python-2.7.13/Objects/unicodeobject.c
|
||||
@@ -5732,20 +5732,20 @@ PyUnicode_Join(PyObject *separator, PyOb
|
||||
|
||||
/* Make sure we have enough space for the separator and the item. */
|
||||
itemlen = PyUnicode_GET_SIZE(item);
|
||||
- new_res_used = res_used + itemlen;
|
||||
- if (new_res_used < 0)
|
||||
+ if (res_used > PY_SSIZE_T_MAX - itemlen)
|
||||
goto Overflow;
|
||||
+ new_res_used = res_used + itemlen;
|
||||
if (i < seqlen - 1) {
|
||||
- new_res_used += seplen;
|
||||
- if (new_res_used < 0)
|
||||
+ if (new_res_used > PY_SSIZE_T_MAX - seplen)
|
||||
goto Overflow;
|
||||
+ new_res_used += seplen;
|
||||
}
|
||||
if (new_res_used > res_alloc) {
|
||||
/* double allocated size until it's big enough */
|
||||
do {
|
||||
- res_alloc += res_alloc;
|
||||
- if (res_alloc <= 0)
|
||||
+ if (res_alloc >= PY_SSIZE_T_MAX - res_alloc)
|
||||
goto Overflow;
|
||||
+ res_alloc += res_alloc;
|
||||
} while (new_res_used > res_alloc);
|
||||
if (_PyUnicode_Resize(&res, res_alloc) < 0) {
|
||||
Py_DECREF(item);
|
||||
@@ -5943,7 +5943,7 @@ PyObject *replace(PyUnicodeObject *self,
|
||||
} else {
|
||||
|
||||
Py_ssize_t n, i, j;
|
||||
- Py_ssize_t product, new_size, delta;
|
||||
+ Py_ssize_t new_size, delta;
|
||||
Py_UNICODE *p;
|
||||
|
||||
/* replace strings */
|
||||
@@ -5956,18 +5956,12 @@ PyObject *replace(PyUnicodeObject *self,
|
||||
if (delta == 0) {
|
||||
new_size = self->length;
|
||||
} else {
|
||||
- product = n * (str2->length - str1->length);
|
||||
- if ((product / (str2->length - str1->length)) != n) {
|
||||
- PyErr_SetString(PyExc_OverflowError,
|
||||
- "replace string is too long");
|
||||
- return NULL;
|
||||
- }
|
||||
- new_size = self->length + product;
|
||||
- if (new_size < 0) {
|
||||
+ if (str2->length - str1->length > (PY_SSIZE_T_MAX - self->length) / n) {
|
||||
PyErr_SetString(PyExc_OverflowError,
|
||||
"replace string is too long");
|
||||
return NULL;
|
||||
}
|
||||
+ new_size = self->length + n * (str2->length - str1->length);
|
||||
}
|
||||
u = _PyUnicode_New(new_size);
|
||||
if (!u)
|
||||
Index: Python-2.7.13/Objects/tupleobject.c
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Objects/tupleobject.c
|
||||
+++ Python-2.7.13/Objects/tupleobject.c
|
||||
@@ -446,9 +446,9 @@ tupleconcat(register PyTupleObject *a, r
|
||||
return NULL;
|
||||
}
|
||||
#define b ((PyTupleObject *)bb)
|
||||
- size = Py_SIZE(a) + Py_SIZE(b);
|
||||
- if (size < 0)
|
||||
+ if (Py_SIZE(a) > PY_SSIZE_T_MAX - Py_SIZE(b))
|
||||
return PyErr_NoMemory();
|
||||
+ size = Py_SIZE(a) + Py_SIZE(b);
|
||||
np = (PyTupleObject *) PyTuple_New(size);
|
||||
if (np == NULL) {
|
||||
return NULL;
|
||||
@@ -490,9 +490,9 @@ tuplerepeat(PyTupleObject *a, Py_ssize_t
|
||||
if (Py_SIZE(a) == 0)
|
||||
return PyTuple_New(0);
|
||||
}
|
||||
- size = Py_SIZE(a) * n;
|
||||
- if (size/Py_SIZE(a) != n)
|
||||
+ if (n > PY_SSIZE_T_MAX / Py_SIZE(a))
|
||||
return PyErr_NoMemory();
|
||||
+ size = Py_SIZE(a) * n;
|
||||
np = (PyTupleObject *) PyTuple_New(size);
|
||||
if (np == NULL)
|
||||
return NULL;
|
||||
diff -r 5ea0fef6ec53 Objects/bytearrayobject.c
|
||||
--- a/Objects/bytearrayobject.c Wed Dec 28 15:41:09 2016 -0800
|
||||
+++ b/Objects/bytearrayobject.c Thu Jan 05 14:05:29 2017 +0800
|
||||
@@ -1571,31 +1571,30 @@
|
||||
{
|
||||
char *self_s, *result_s;
|
||||
Py_ssize_t self_len, result_len;
|
||||
- Py_ssize_t count, i, product;
|
||||
+ Py_ssize_t count, i;
|
||||
PyByteArrayObject *result;
|
||||
|
||||
self_len = PyByteArray_GET_SIZE(self);
|
||||
|
||||
- /* 1 at the end plus 1 after every character */
|
||||
- count = self_len+1;
|
||||
- if (maxcount < count)
|
||||
+ /* 1 at the end plus 1 after every character;
|
||||
+ count = min(maxcount, self_len + 1) */
|
||||
+ if (maxcount <= self_len) {
|
||||
count = maxcount;
|
||||
+ }
|
||||
+ else {
|
||||
+ /* Can't overflow: self_len + 1 <= maxcount <= PY_SSIZE_T_MAX. */
|
||||
+ count = self_len + 1;
|
||||
+ }
|
||||
|
||||
/* Check for overflow */
|
||||
/* result_len = count * to_len + self_len; */
|
||||
- product = count * to_len;
|
||||
- if (product / to_len != count) {
|
||||
+ assert(count > 0);
|
||||
+ if (to_len > (PY_SSIZE_T_MAX - self_len) / count) {
|
||||
PyErr_SetString(PyExc_OverflowError,
|
||||
- "replace string is too long");
|
||||
+ "replace bytes is too long");
|
||||
return NULL;
|
||||
}
|
||||
- result_len = product + self_len;
|
||||
- if (result_len < 0) {
|
||||
- PyErr_SetString(PyExc_OverflowError,
|
||||
- "replace string is too long");
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
+ result_len = count * to_len + self_len;
|
||||
if (! (result = (PyByteArrayObject *)
|
||||
PyByteArray_FromStringAndSize(NULL, result_len)) )
|
||||
return NULL;
|
||||
@@ -1824,7 +1823,7 @@
|
||||
char *self_s, *result_s;
|
||||
char *start, *next, *end;
|
||||
Py_ssize_t self_len, result_len;
|
||||
- Py_ssize_t count, product;
|
||||
+ Py_ssize_t count;
|
||||
PyByteArrayObject *result;
|
||||
|
||||
self_s = PyByteArray_AS_STRING(self);
|
||||
@@ -1838,16 +1837,12 @@
|
||||
|
||||
/* use the difference between current and new, hence the "-1" */
|
||||
/* result_len = self_len + count * (to_len-1) */
|
||||
- product = count * (to_len-1);
|
||||
- if (product / (to_len-1) != count) {
|
||||
+ assert(count > 0);
|
||||
+ if (to_len - 1 > (PY_SSIZE_T_MAX - self_len) / count) {
|
||||
PyErr_SetString(PyExc_OverflowError, "replace bytes is too long");
|
||||
return NULL;
|
||||
}
|
||||
- result_len = self_len + product;
|
||||
- if (result_len < 0) {
|
||||
- PyErr_SetString(PyExc_OverflowError, "replace bytes is too long");
|
||||
- return NULL;
|
||||
- }
|
||||
+ result_len = self_len + count * (to_len - 1);
|
||||
|
||||
if ( (result = (PyByteArrayObject *)
|
||||
PyByteArray_FromStringAndSize(NULL, result_len)) == NULL)
|
||||
@@ -1891,7 +1886,7 @@
|
||||
char *self_s, *result_s;
|
||||
char *start, *next, *end;
|
||||
Py_ssize_t self_len, result_len;
|
||||
- Py_ssize_t count, offset, product;
|
||||
+ Py_ssize_t count, offset;
|
||||
PyByteArrayObject *result;
|
||||
|
||||
self_s = PyByteArray_AS_STRING(self);
|
||||
@@ -1908,16 +1903,12 @@
|
||||
|
||||
/* Check for overflow */
|
||||
/* result_len = self_len + count * (to_len-from_len) */
|
||||
- product = count * (to_len-from_len);
|
||||
- if (product / (to_len-from_len) != count) {
|
||||
+ assert(count > 0);
|
||||
+ if (to_len - from_len > (PY_SSIZE_T_MAX - self_len) / count) {
|
||||
PyErr_SetString(PyExc_OverflowError, "replace bytes is too long");
|
||||
return NULL;
|
||||
}
|
||||
- result_len = self_len + product;
|
||||
- if (result_len < 0) {
|
||||
- PyErr_SetString(PyExc_OverflowError, "replace bytes is too long");
|
||||
- return NULL;
|
||||
- }
|
||||
+ result_len = self_len + count * (to_len - from_len);
|
||||
|
||||
if ( (result = (PyByteArrayObject *)
|
||||
PyByteArray_FromStringAndSize(NULL, result_len)) == NULL)
|
||||
diff -r 5ea0fef6ec53 Objects/stringobject.c
|
||||
--- a/Objects/stringobject.c Wed Dec 28 15:41:09 2016 -0800
|
||||
+++ b/Objects/stringobject.c Thu Jan 05 14:05:29 2017 +0800
|
||||
@@ -2358,31 +2358,30 @@
|
||||
{
|
||||
char *self_s, *result_s;
|
||||
Py_ssize_t self_len, result_len;
|
||||
- Py_ssize_t count, i, product;
|
||||
+ Py_ssize_t count, i;
|
||||
PyStringObject *result;
|
||||
|
||||
self_len = PyString_GET_SIZE(self);
|
||||
|
||||
- /* 1 at the end plus 1 after every character */
|
||||
- count = self_len+1;
|
||||
- if (maxcount < count)
|
||||
+ /* 1 at the end plus 1 after every character;
|
||||
+ count = min(maxcount, self_len + 1) */
|
||||
+ if (maxcount <= self_len) {
|
||||
count = maxcount;
|
||||
+ }
|
||||
+ else {
|
||||
+ /* Can't overflow: self_len + 1 <= maxcount <= PY_SSIZE_T_MAX. */
|
||||
+ count = self_len + 1;
|
||||
+ }
|
||||
|
||||
/* Check for overflow */
|
||||
/* result_len = count * to_len + self_len; */
|
||||
- product = count * to_len;
|
||||
- if (product / to_len != count) {
|
||||
+ assert(count > 0);
|
||||
+ if (to_len > (PY_SSIZE_T_MAX - self_len) / count) {
|
||||
PyErr_SetString(PyExc_OverflowError,
|
||||
"replace string is too long");
|
||||
return NULL;
|
||||
}
|
||||
- result_len = product + self_len;
|
||||
- if (result_len < 0) {
|
||||
- PyErr_SetString(PyExc_OverflowError,
|
||||
- "replace string is too long");
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
+ result_len = count * to_len + self_len;
|
||||
if (! (result = (PyStringObject *)
|
||||
PyString_FromStringAndSize(NULL, result_len)) )
|
||||
return NULL;
|
||||
@@ -2610,7 +2609,7 @@
|
||||
char *self_s, *result_s;
|
||||
char *start, *next, *end;
|
||||
Py_ssize_t self_len, result_len;
|
||||
- Py_ssize_t count, product;
|
||||
+ Py_ssize_t count;
|
||||
PyStringObject *result;
|
||||
|
||||
self_s = PyString_AS_STRING(self);
|
||||
@@ -2624,16 +2623,12 @@
|
||||
|
||||
/* use the difference between current and new, hence the "-1" */
|
||||
/* result_len = self_len + count * (to_len-1) */
|
||||
- product = count * (to_len-1);
|
||||
- if (product / (to_len-1) != count) {
|
||||
+ assert(count > 0);
|
||||
+ if (to_len - 1 > (PY_SSIZE_T_MAX - self_len) / count) {
|
||||
PyErr_SetString(PyExc_OverflowError, "replace string is too long");
|
||||
return NULL;
|
||||
}
|
||||
- result_len = self_len + product;
|
||||
- if (result_len < 0) {
|
||||
- PyErr_SetString(PyExc_OverflowError, "replace string is too long");
|
||||
- return NULL;
|
||||
- }
|
||||
+ result_len = self_len + count * (to_len - 1);
|
||||
|
||||
if ( (result = (PyStringObject *)
|
||||
PyString_FromStringAndSize(NULL, result_len)) == NULL)
|
||||
@@ -2676,7 +2671,7 @@
|
||||
char *self_s, *result_s;
|
||||
char *start, *next, *end;
|
||||
Py_ssize_t self_len, result_len;
|
||||
- Py_ssize_t count, offset, product;
|
||||
+ Py_ssize_t count, offset;
|
||||
PyStringObject *result;
|
||||
|
||||
self_s = PyString_AS_STRING(self);
|
||||
@@ -2693,16 +2688,12 @@
|
||||
|
||||
/* Check for overflow */
|
||||
/* result_len = self_len + count * (to_len-from_len) */
|
||||
- product = count * (to_len-from_len);
|
||||
- if (product / (to_len-from_len) != count) {
|
||||
+ assert(count > 0);
|
||||
+ if (to_len - from_len > (PY_SSIZE_T_MAX - self_len) / count) {
|
||||
PyErr_SetString(PyExc_OverflowError, "replace string is too long");
|
||||
return NULL;
|
||||
}
|
||||
- result_len = self_len + product;
|
||||
- if (result_len < 0) {
|
||||
- PyErr_SetString(PyExc_OverflowError, "replace string is too long");
|
||||
- return NULL;
|
||||
- }
|
||||
+ result_len = self_len + count * (to_len - from_len);
|
||||
|
||||
if ( (result = (PyStringObject *)
|
||||
PyString_FromStringAndSize(NULL, result_len)) == NULL)
|
3
python-2.7.14-docs-html.tar.bz2
Normal file
3
python-2.7.14-docs-html.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:54d97a289ad24f419f195440945056db1f1ba1c3d12e5824cf25837c2ccbfa59
|
||||
size 6874237
|
3
python-2.7.14-docs-pdf-a4.tar.bz2
Normal file
3
python-2.7.14-docs-pdf-a4.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ce4db77abd28c7067cc2de1aecea6d8939b735dd8451f310f4f4cf163fb78fa6
|
||||
size 9343063
|
3
python-2.7.14-docs-pdf-letter.tar.bz2
Normal file
3
python-2.7.14-docs-pdf-letter.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:cb93a147705b771c91798aa512fa836e3ae38736b4df4fa10eb518e96fec8060
|
||||
size 9343109
|
@ -1,9 +1,11 @@
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -573,8 +573,15 @@
|
||||
-DHGVERSION="\"`LC_ALL=C $(HGVERSION)`\"" \
|
||||
-DHGTAG="\"`LC_ALL=C $(HGTAG)`\"" \
|
||||
-DHGBRANCH="\"`LC_ALL=C $(HGBRANCH)`\"" \
|
||||
Index: Python-2.7.14/Makefile.pre.in
|
||||
===================================================================
|
||||
--- Python-2.7.14.orig/Makefile.pre.in
|
||||
+++ Python-2.7.14/Makefile.pre.in
|
||||
@@ -638,8 +638,15 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \
|
||||
-DGITVERSION="\"`LC_ALL=C $(GITVERSION)`\"" \
|
||||
-DGITTAG="\"`LC_ALL=C $(GITTAG)`\"" \
|
||||
-DGITBRANCH="\"`LC_ALL=C $(GITBRANCH)`\"" \
|
||||
+ -DDATE="\"`LC_ALL=C date -u -r Makefile.pre.in +"%b %d %Y"`\"" \
|
||||
+ -DTIME="\"`LC_ALL=C date -u -r Makefile.pre.in +"%T"`\"" \
|
||||
-o $@ $(srcdir)/Modules/getbuildinfo.c
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: Python-2.7.13/configure.ac
|
||||
Index: Python-2.7.14/configure.ac
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/configure.ac
|
||||
+++ Python-2.7.13/configure.ac
|
||||
@@ -759,6 +759,41 @@ SunOS*)
|
||||
--- Python-2.7.14.orig/configure.ac
|
||||
+++ Python-2.7.14/configure.ac
|
||||
@@ -758,6 +758,41 @@ SunOS*)
|
||||
;;
|
||||
esac
|
||||
|
||||
@ -44,10 +44,10 @@ Index: Python-2.7.13/configure.ac
|
||||
|
||||
AC_SUBST(LIBRARY)
|
||||
AC_MSG_CHECKING(LIBRARY)
|
||||
Index: Python-2.7.13/Include/pythonrun.h
|
||||
Index: Python-2.7.14/Include/pythonrun.h
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Include/pythonrun.h
|
||||
+++ Python-2.7.13/Include/pythonrun.h
|
||||
--- Python-2.7.14.orig/Include/pythonrun.h
|
||||
+++ Python-2.7.14/Include/pythonrun.h
|
||||
@@ -108,6 +108,8 @@ PyAPI_FUNC(char *) Py_GetPath(void);
|
||||
/* In their own files */
|
||||
PyAPI_FUNC(const char *) Py_GetVersion(void);
|
||||
@ -57,10 +57,10 @@ Index: Python-2.7.13/Include/pythonrun.h
|
||||
PyAPI_FUNC(const char *) Py_GetCopyright(void);
|
||||
PyAPI_FUNC(const char *) Py_GetCompiler(void);
|
||||
PyAPI_FUNC(const char *) Py_GetBuildInfo(void);
|
||||
Index: Python-2.7.13/Lib/distutils/command/install.py
|
||||
Index: Python-2.7.14/Lib/distutils/command/install.py
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Lib/distutils/command/install.py
|
||||
+++ Python-2.7.13/Lib/distutils/command/install.py
|
||||
--- Python-2.7.14.orig/Lib/distutils/command/install.py
|
||||
+++ Python-2.7.14/Lib/distutils/command/install.py
|
||||
@@ -22,6 +22,8 @@ from site import USER_BASE
|
||||
from site import USER_SITE
|
||||
|
||||
@ -79,10 +79,10 @@ Index: Python-2.7.13/Lib/distutils/command/install.py
|
||||
'headers': '$base/include/python$py_version_short/$dist_name',
|
||||
'scripts': '$base/bin',
|
||||
'data' : '$base',
|
||||
Index: Python-2.7.13/Lib/distutils/sysconfig.py
|
||||
Index: Python-2.7.14/Lib/distutils/sysconfig.py
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Lib/distutils/sysconfig.py
|
||||
+++ Python-2.7.13/Lib/distutils/sysconfig.py
|
||||
--- Python-2.7.14.orig/Lib/distutils/sysconfig.py
|
||||
+++ Python-2.7.14/Lib/distutils/sysconfig.py
|
||||
@@ -119,8 +119,11 @@ def get_python_lib(plat_specific=0, stan
|
||||
prefix = plat_specific and EXEC_PREFIX or PREFIX
|
||||
|
||||
@ -97,10 +97,10 @@ Index: Python-2.7.13/Lib/distutils/sysconfig.py
|
||||
if standard_lib:
|
||||
return libpython
|
||||
else:
|
||||
Index: Python-2.7.13/Lib/pydoc.py
|
||||
Index: Python-2.7.14/Lib/pydoc.py
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Lib/pydoc.py
|
||||
+++ Python-2.7.13/Lib/pydoc.py
|
||||
--- Python-2.7.14.orig/Lib/pydoc.py
|
||||
+++ Python-2.7.14/Lib/pydoc.py
|
||||
@@ -375,7 +375,7 @@ class Doc:
|
||||
docmodule = docclass = docroutine = docother = docproperty = docdata = fail
|
||||
|
||||
@ -110,10 +110,10 @@ Index: Python-2.7.13/Lib/pydoc.py
|
||||
"python"+sys.version[0:3])):
|
||||
"""Return the location of module docs or None"""
|
||||
|
||||
Index: Python-2.7.13/Lib/site.py
|
||||
Index: Python-2.7.14/Lib/site.py
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Lib/site.py
|
||||
+++ Python-2.7.13/Lib/site.py
|
||||
--- Python-2.7.14.orig/Lib/site.py
|
||||
+++ Python-2.7.14/Lib/site.py
|
||||
@@ -231,29 +231,38 @@ def getuserbase():
|
||||
USER_BASE = get_config_var('userbase')
|
||||
return USER_BASE
|
||||
@ -197,10 +197,10 @@ Index: Python-2.7.13/Lib/site.py
|
||||
return sitepackages
|
||||
|
||||
def addsitepackages(known_paths):
|
||||
Index: Python-2.7.13/Lib/sysconfig.py
|
||||
Index: Python-2.7.14/Lib/sysconfig.py
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Lib/sysconfig.py
|
||||
+++ Python-2.7.13/Lib/sysconfig.py
|
||||
--- Python-2.7.14.orig/Lib/sysconfig.py
|
||||
+++ Python-2.7.14/Lib/sysconfig.py
|
||||
@@ -7,10 +7,10 @@ from os.path import pardir, realpath
|
||||
|
||||
_INSTALL_SCHEMES = {
|
||||
@ -229,10 +229,10 @@ Index: Python-2.7.13/Lib/sysconfig.py
|
||||
'include': '{userbase}/include/python{py_version_short}',
|
||||
'scripts': '{userbase}/bin',
|
||||
'data' : '{userbase}',
|
||||
Index: Python-2.7.13/Lib/test/test_dl.py
|
||||
Index: Python-2.7.14/Lib/test/test_dl.py
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Lib/test/test_dl.py
|
||||
+++ Python-2.7.13/Lib/test/test_dl.py
|
||||
--- Python-2.7.14.orig/Lib/test/test_dl.py
|
||||
+++ Python-2.7.14/Lib/test/test_dl.py
|
||||
@@ -4,10 +4,11 @@
|
||||
import unittest
|
||||
from test.test_support import verbose, import_module
|
||||
@ -247,11 +247,11 @@ Index: Python-2.7.13/Lib/test/test_dl.py
|
||||
('/usr/bin/cygwin1.dll', 'getpid'),
|
||||
('/usr/lib/libc.dylib', 'getpid'),
|
||||
]
|
||||
Index: Python-2.7.13/Lib/test/test_site.py
|
||||
Index: Python-2.7.14/Lib/test/test_site.py
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Lib/test/test_site.py
|
||||
+++ Python-2.7.13/Lib/test/test_site.py
|
||||
@@ -235,12 +235,16 @@ class HelperFunctionsTests(unittest.Test
|
||||
--- Python-2.7.14.orig/Lib/test/test_site.py
|
||||
+++ Python-2.7.14/Lib/test/test_site.py
|
||||
@@ -252,12 +252,16 @@ class HelperFunctionsTests(unittest.Test
|
||||
self.assertEqual(dirs[0], wanted)
|
||||
elif os.sep == '/':
|
||||
# OS X, Linux, FreeBSD, etc
|
||||
@ -271,10 +271,10 @@ Index: Python-2.7.13/Lib/test/test_site.py
|
||||
else:
|
||||
# other platforms
|
||||
self.assertEqual(len(dirs), 2)
|
||||
Index: Python-2.7.13/Lib/trace.py
|
||||
Index: Python-2.7.14/Lib/trace.py
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Lib/trace.py
|
||||
+++ Python-2.7.13/Lib/trace.py
|
||||
--- Python-2.7.14.orig/Lib/trace.py
|
||||
+++ Python-2.7.14/Lib/trace.py
|
||||
@@ -754,10 +754,10 @@ def main(argv=None):
|
||||
# should I also call expanduser? (after all, could use $HOME)
|
||||
|
||||
@ -288,11 +288,11 @@ Index: Python-2.7.13/Lib/trace.py
|
||||
"python" + sys.version[:3]))
|
||||
s = os.path.normpath(s)
|
||||
ignore_dirs.append(s)
|
||||
Index: Python-2.7.13/Makefile.pre.in
|
||||
Index: Python-2.7.14/Makefile.pre.in
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Makefile.pre.in
|
||||
+++ Python-2.7.13/Makefile.pre.in
|
||||
@@ -92,6 +92,8 @@ PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) $(CFLAG
|
||||
--- Python-2.7.14.orig/Makefile.pre.in
|
||||
+++ Python-2.7.14/Makefile.pre.in
|
||||
@@ -91,6 +91,8 @@ PY_CFLAGS= $(CFLAGS) $(CPPFLAGS) $(CFLAG
|
||||
|
||||
# Machine-dependent subdirectories
|
||||
MACHDEP= @MACHDEP@
|
||||
@ -301,7 +301,7 @@ Index: Python-2.7.13/Makefile.pre.in
|
||||
|
||||
# Multiarch directory (may be empty)
|
||||
MULTIARCH= @MULTIARCH@
|
||||
@@ -668,6 +670,7 @@ Modules/getpath.o: $(srcdir)/Modules/get
|
||||
@@ -644,6 +646,7 @@ Modules/getpath.o: $(srcdir)/Modules/get
|
||||
-DEXEC_PREFIX='"$(exec_prefix)"' \
|
||||
-DVERSION='"$(VERSION)"' \
|
||||
-DVPATH='"$(VPATH)"' \
|
||||
@ -309,8 +309,8 @@ Index: Python-2.7.13/Makefile.pre.in
|
||||
-o $@ $(srcdir)/Modules/getpath.c
|
||||
|
||||
Modules/python.o: $(srcdir)/Modules/python.c
|
||||
@@ -708,7 +711,7 @@ $(AST_C): $(AST_ASDL) $(ASDLGEN_FILES)
|
||||
Python/compile.o Python/symtable.o Python/ast.o: $(GRAMMAR_H) $(AST_H)
|
||||
@@ -692,7 +695,7 @@ regen-ast:
|
||||
Python/compile.o Python/symtable.o Python/ast.o: $(srcdir)/Include/graminit.h $(srcdir)/Include/Python-ast.h
|
||||
|
||||
Python/getplatform.o: $(srcdir)/Python/getplatform.c
|
||||
- $(CC) -c $(PY_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c
|
||||
@ -318,10 +318,10 @@ Index: Python-2.7.13/Makefile.pre.in
|
||||
|
||||
Python/importdl.o: $(srcdir)/Python/importdl.c
|
||||
$(CC) -c $(PY_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c
|
||||
Index: Python-2.7.13/Modules/getpath.c
|
||||
Index: Python-2.7.14/Modules/getpath.c
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Modules/getpath.c
|
||||
+++ Python-2.7.13/Modules/getpath.c
|
||||
--- Python-2.7.14.orig/Modules/getpath.c
|
||||
+++ Python-2.7.14/Modules/getpath.c
|
||||
@@ -100,6 +100,8 @@
|
||||
#error "PREFIX, EXEC_PREFIX, VERSION, and VPATH must be constant defined"
|
||||
#endif
|
||||
@ -340,10 +340,10 @@ Index: Python-2.7.13/Modules/getpath.c
|
||||
|
||||
static void
|
||||
reduce(char *dir)
|
||||
Index: Python-2.7.13/Python/getplatform.c
|
||||
Index: Python-2.7.14/Python/getplatform.c
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Python/getplatform.c
|
||||
+++ Python-2.7.13/Python/getplatform.c
|
||||
--- Python-2.7.14.orig/Python/getplatform.c
|
||||
+++ Python-2.7.14/Python/getplatform.c
|
||||
@@ -10,3 +10,23 @@ Py_GetPlatform(void)
|
||||
{
|
||||
return PLATFORM;
|
||||
@ -368,10 +368,10 @@ Index: Python-2.7.13/Python/getplatform.c
|
||||
+{
|
||||
+ return LIB;
|
||||
+}
|
||||
Index: Python-2.7.13/Python/sysmodule.c
|
||||
Index: Python-2.7.14/Python/sysmodule.c
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/Python/sysmodule.c
|
||||
+++ Python-2.7.13/Python/sysmodule.c
|
||||
--- Python-2.7.14.orig/Python/sysmodule.c
|
||||
+++ Python-2.7.14/Python/sysmodule.c
|
||||
@@ -1437,6 +1437,10 @@ _PySys_Init(void)
|
||||
PyString_FromString(Py_GetCopyright()));
|
||||
SET_SYS_FROM_STRING("platform",
|
||||
@ -383,10 +383,10 @@ Index: Python-2.7.13/Python/sysmodule.c
|
||||
SET_SYS_FROM_STRING("executable",
|
||||
PyString_FromString(Py_GetProgramFullPath()));
|
||||
SET_SYS_FROM_STRING("prefix",
|
||||
Index: Python-2.7.13/setup.py
|
||||
Index: Python-2.7.14/setup.py
|
||||
===================================================================
|
||||
--- Python-2.7.13.orig/setup.py
|
||||
+++ Python-2.7.13/setup.py
|
||||
--- Python-2.7.14.orig/setup.py
|
||||
+++ Python-2.7.14/setup.py
|
||||
@@ -456,7 +456,7 @@ class PyBuildExt(build_ext):
|
||||
def detect_modules(self):
|
||||
# Ensure that /usr/local is always used
|
||||
@ -410,7 +410,7 @@ Index: Python-2.7.13/setup.py
|
||||
extra_link_args=readline_extra_link_args,
|
||||
libraries=readline_libs) )
|
||||
else:
|
||||
@@ -1938,18 +1938,17 @@ class PyBuildExt(build_ext):
|
||||
@@ -1941,18 +1941,17 @@ class PyBuildExt(build_ext):
|
||||
# Check for various platform-specific directories
|
||||
if host_platform == 'sunos5':
|
||||
include_dirs.append('/usr/openwin/include')
|
||||
|
@ -1,3 +1,16 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Nov 20 16:11:48 UTC 2017 - jmatejek@suse.com
|
||||
|
||||
- update to 2.7.14
|
||||
* dozens of bugfixes, see NEWS for details
|
||||
* fixed possible integer overflow in PyString_DecodeEscape (CVE-2017-1000158, bsc#1068664)
|
||||
* fixed segfaults with dict mutated during search
|
||||
* fixed possible free-after-use problems with buffer objects with custom indexing
|
||||
* fixed urllib.splithost to correctly parse fragments (bpo-30500)
|
||||
- drop upstreamed python-2.7.13-overflow_check.patch
|
||||
- drop unneeded python-2.7.12-makeopcode.patch
|
||||
- drop upstreamed 0001-2.7-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3094.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Nov 2 16:53:42 UTC 2017 - mpluskal@suse.com
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
|
||||
Name: python-base
|
||||
Version: 2.7.13
|
||||
Version: 2.7.14
|
||||
Release: 0
|
||||
Summary: Python Interpreter base package
|
||||
License: Python-2.0
|
||||
@ -54,11 +54,8 @@ Patch33: python-2.7.9-ssl_ca_path.patch
|
||||
Patch34: python-2.7.9-sles-disable-verification-by-default.patch
|
||||
# PATCH-FIX-UPSTREAM python-ncurses-6.0-accessors.patch dimstar@opensuse.org -- Fix build with NCurses 6.0 and OPAQUE_WINDOW set to 1
|
||||
Patch35: python-ncurses-6.0-accessors.patch
|
||||
Patch36: python-2.7.13-overflow_check.patch
|
||||
Patch37: python-2.7.12-makeopcode.patch
|
||||
# PATCH-FIX-UPSTREAM bmwiedemann@suse.de -- allow python packages to build reproducibly
|
||||
Patch38: reproducible.patch
|
||||
Patch39: 0001-2.7-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3094.patch
|
||||
# COMMON-PATCH-END
|
||||
%define python_version %(echo %{tarversion} | head -c 3)
|
||||
BuildRequires: automake
|
||||
@ -161,10 +158,7 @@ other applications.
|
||||
%patch34 -p1
|
||||
%endif
|
||||
%patch35 -p1
|
||||
%patch36 -p1
|
||||
%patch37 -p1
|
||||
%patch38 -p1
|
||||
%patch39 -p1
|
||||
|
||||
# drop Autoconf version requirement
|
||||
sed -i 's/^version_required/dnl version_required/' configure.ac
|
||||
|
@ -16,10 +16,10 @@ This patch was partially autogenerated:
|
||||
setup.py | 6 +-
|
||||
6 files changed, 120 insertions(+), 41 deletions(-)
|
||||
|
||||
Index: Python-2.7.5/Lib/bsddb/test/test_all.py
|
||||
Index: Python-2.7.14/Lib/bsddb/test/test_all.py
|
||||
===================================================================
|
||||
--- Python-2.7.5.orig/Lib/bsddb/test/test_all.py
|
||||
+++ Python-2.7.5/Lib/bsddb/test/test_all.py
|
||||
--- Python-2.7.14.orig/Lib/bsddb/test/test_all.py
|
||||
+++ Python-2.7.14/Lib/bsddb/test/test_all.py
|
||||
@@ -74,8 +74,9 @@ if sys.version_info[0] >= 3 :
|
||||
key = key.decode(charset)
|
||||
return (key, value.decode(charset))
|
||||
@ -43,7 +43,7 @@ Index: Python-2.7.5/Lib/bsddb/test/test_all.py
|
||||
return self._fix(v)
|
||||
|
||||
def pget(self, key=None, data=None, flags=0) :
|
||||
@@ -492,7 +493,11 @@ def print_versions():
|
||||
@@ -489,7 +490,11 @@ def print_versions():
|
||||
print 'py module: %s' % getattr(bsddb, "__file"+suffix)
|
||||
print 'extension module: %s' % getattr(bsddb, "__file"+suffix)
|
||||
|
||||
@ -56,10 +56,10 @@ Index: Python-2.7.5/Lib/bsddb/test/test_all.py
|
||||
print 'My pid: %s' % os.getpid()
|
||||
print '-=' * 38
|
||||
|
||||
Index: Python-2.7.5/Lib/bsddb/test/test_misc.py
|
||||
Index: Python-2.7.14/Lib/bsddb/test/test_misc.py
|
||||
===================================================================
|
||||
--- Python-2.7.5.orig/Lib/bsddb/test/test_misc.py
|
||||
+++ Python-2.7.5/Lib/bsddb/test/test_misc.py
|
||||
--- Python-2.7.14.orig/Lib/bsddb/test/test_misc.py
|
||||
+++ Python-2.7.14/Lib/bsddb/test/test_misc.py
|
||||
@@ -46,8 +46,9 @@ class MiscTestCase(unittest.TestCase):
|
||||
d[repr(i)] = repr(100*i)
|
||||
db.close()
|
||||
@ -72,10 +72,10 @@ Index: Python-2.7.5/Lib/bsddb/test/test_misc.py
|
||||
db.close()
|
||||
|
||||
# http://sourceforge.net/tracker/index.php?func=detail&aid=1708868&group_id=13900&atid=313900
|
||||
Index: Python-2.7.5/Lib/bsddb/test/test_replication.py
|
||||
Index: Python-2.7.14/Lib/bsddb/test/test_replication.py
|
||||
===================================================================
|
||||
--- Python-2.7.5.orig/Lib/bsddb/test/test_replication.py
|
||||
+++ Python-2.7.5/Lib/bsddb/test/test_replication.py
|
||||
--- Python-2.7.14.orig/Lib/bsddb/test/test_replication.py
|
||||
+++ Python-2.7.14/Lib/bsddb/test/test_replication.py
|
||||
@@ -165,21 +165,10 @@ class DBReplicationManager(DBReplication
|
||||
# is not generated if the master has no new transactions.
|
||||
# This is solved in BDB 4.6 (#15542).
|
||||
@ -100,7 +100,7 @@ Index: Python-2.7.5/Lib/bsddb/test/test_replication.py
|
||||
|
||||
d = self.dbenvMaster.repmgr_site_list()
|
||||
self.assertEqual(len(d), 1)
|
||||
@@ -239,14 +228,6 @@ class DBReplicationManager(DBReplication
|
||||
@@ -237,14 +226,6 @@ class DBReplicationManager(DBReplication
|
||||
txn.commit()
|
||||
if v is None :
|
||||
time.sleep(0.02)
|
||||
@ -112,10 +112,10 @@ Index: Python-2.7.5/Lib/bsddb/test/test_replication.py
|
||||
- if time.time()>=timeout and startup_timeout:
|
||||
- self.skipTest("replication test skipped due to random failure, "
|
||||
- "see issue 3892")
|
||||
self.assertTrue(time.time()<timeout)
|
||||
self.assertLess(time.time(), timeout)
|
||||
self.assertEqual("123", v)
|
||||
|
||||
@@ -377,7 +358,7 @@ class DBBaseReplication(DBReplication) :
|
||||
@@ -375,7 +356,7 @@ class DBBaseReplication(DBReplication) :
|
||||
# is not generated if the master has no new transactions.
|
||||
# This is solved in BDB 4.6 (#15542).
|
||||
import time
|
||||
@ -124,10 +124,10 @@ Index: Python-2.7.5/Lib/bsddb/test/test_replication.py
|
||||
while (time.time()<timeout) and not (self.confirmed_master and
|
||||
self.client_startupdone) :
|
||||
time.sleep(0.02)
|
||||
Index: Python-2.7.5/Modules/_bsddb.c
|
||||
Index: Python-2.7.14/Modules/_bsddb.c
|
||||
===================================================================
|
||||
--- Python-2.7.5.orig/Modules/_bsddb.c
|
||||
+++ Python-2.7.5/Modules/_bsddb.c
|
||||
--- Python-2.7.14.orig/Modules/_bsddb.c
|
||||
+++ Python-2.7.14/Modules/_bsddb.c
|
||||
@@ -124,10 +124,14 @@ typedef int Py_ssize_t;
|
||||
#define NUMBER_Check PyLong_Check
|
||||
#define NUMBER_AsLong PyLong_AsLong
|
||||
@ -162,7 +162,7 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
/* The same, when the value is a time_t */
|
||||
static void _addTimeTToDict(PyObject* dict, char *name, time_t value)
|
||||
{
|
||||
@@ -2662,13 +2678,21 @@ _default_cmp(const DBT *leftKey,
|
||||
@@ -2655,13 +2671,21 @@ _default_cmp(const DBT *leftKey,
|
||||
static int
|
||||
_db_compareCallback(DB* db,
|
||||
const DBT *leftKey,
|
||||
@ -185,7 +185,7 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
if (self == NULL || self->btCompareCallback == NULL) {
|
||||
MYDB_BEGIN_BLOCK_THREADS;
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
@@ -2776,13 +2800,21 @@ DB_set_bt_compare(DBObject* self, PyObje
|
||||
@@ -2769,13 +2793,21 @@ DB_set_bt_compare(DBObject* self, PyObje
|
||||
static int
|
||||
_db_dupCompareCallback(DB* db,
|
||||
const DBT *leftKey,
|
||||
@ -208,7 +208,7 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
if (self == NULL || self->dupCompareCallback == NULL) {
|
||||
MYDB_BEGIN_BLOCK_THREADS;
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
@@ -3559,13 +3591,14 @@ Py_ssize_t DB_length(PyObject* _self)
|
||||
@@ -3554,13 +3586,14 @@ Py_ssize_t DB_length(PyObject* _self)
|
||||
err = self->db->stat(self->db, /*txnid*/ NULL, &sp, 0);
|
||||
MYDB_END_ALLOW_THREADS;
|
||||
|
||||
@ -226,7 +226,7 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
free(sp);
|
||||
return size;
|
||||
}
|
||||
@@ -8406,12 +8439,22 @@ static PyObject*
|
||||
@@ -8398,12 +8431,22 @@ static PyObject*
|
||||
DBSequence_get(DBSequenceObject* self, PyObject* args, PyObject* kwargs)
|
||||
{
|
||||
int err, flags = 0;
|
||||
@ -250,7 +250,7 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
return NULL;
|
||||
CHECK_SEQUENCE_NOT_CLOSED(self)
|
||||
|
||||
@@ -8541,8 +8584,19 @@ DBSequence_remove(DBSequenceObject* self
|
||||
@@ -8533,8 +8576,19 @@ DBSequence_remove(DBSequenceObject* self
|
||||
static PyObject*
|
||||
DBSequence_set_cachesize(DBSequenceObject* self, PyObject* args)
|
||||
{
|
||||
@ -272,7 +272,7 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
return NULL;
|
||||
CHECK_SEQUENCE_NOT_CLOSED(self)
|
||||
|
||||
@@ -8557,7 +8611,11 @@ DBSequence_set_cachesize(DBSequenceObjec
|
||||
@@ -8549,7 +8603,11 @@ DBSequence_set_cachesize(DBSequenceObjec
|
||||
static PyObject*
|
||||
DBSequence_get_cachesize(DBSequenceObject* self)
|
||||
{
|
||||
@ -285,7 +285,7 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
|
||||
CHECK_SEQUENCE_NOT_CLOSED(self)
|
||||
|
||||
@@ -8686,6 +8744,9 @@ DBSequence_stat(DBSequenceObject* self,
|
||||
@@ -8678,6 +8736,9 @@ DBSequence_stat(DBSequenceObject* self,
|
||||
|
||||
|
||||
#define MAKE_INT_ENTRY(name) _addIntToDict(dict_stat, #name, sp->st_##name)
|
||||
@ -295,7 +295,7 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
#define MAKE_LONG_LONG_ENTRY(name) _addDb_seq_tToDict(dict_stat, #name, sp->st_##name)
|
||||
|
||||
MAKE_INT_ENTRY(wait);
|
||||
@@ -8695,10 +8756,15 @@ DBSequence_stat(DBSequenceObject* self,
|
||||
@@ -8687,10 +8748,15 @@ DBSequence_stat(DBSequenceObject* self,
|
||||
MAKE_LONG_LONG_ENTRY(last_value);
|
||||
MAKE_LONG_LONG_ENTRY(min);
|
||||
MAKE_LONG_LONG_ENTRY(max);
|
||||
@ -311,7 +311,7 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
#undef MAKE_LONG_LONG_ENTRY
|
||||
|
||||
free(sp);
|
||||
@@ -9000,7 +9066,7 @@ static PyMethodDef DBEnv_methods[] = {
|
||||
@@ -8992,7 +9058,7 @@ static PyMethodDef DBEnv_methods[] = {
|
||||
{"txn_recover", (PyCFunction)DBEnv_txn_recover, METH_NOARGS},
|
||||
#if (DBVER < 48)
|
||||
{"set_rpc_server", (PyCFunction)DBEnv_set_rpc_server,
|
||||
@ -320,7 +320,7 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
#endif
|
||||
{"set_mp_max_openfd", (PyCFunction)DBEnv_set_mp_max_openfd, METH_VARARGS},
|
||||
{"get_mp_max_openfd", (PyCFunction)DBEnv_get_mp_max_openfd, METH_NOARGS},
|
||||
@@ -9972,6 +10038,10 @@ PyMODINIT_FUNC PyInit__bsddb(void) /
|
||||
@@ -9964,6 +10030,10 @@ PyMODINIT_FUNC PyInit__bsddb(void) /
|
||||
ADD_INT(d, DB_LOG_ZERO);
|
||||
#endif
|
||||
|
||||
@ -331,7 +331,7 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
#if (DBVER >= 44)
|
||||
ADD_INT(d, DB_DSYNC_DB);
|
||||
#endif
|
||||
@@ -10032,6 +10102,10 @@ PyMODINIT_FUNC PyInit__bsddb(void) /
|
||||
@@ -10024,6 +10094,10 @@ PyMODINIT_FUNC PyInit__bsddb(void) /
|
||||
ADD_INT(d, DB_EVENT_REG_PANIC);
|
||||
#endif
|
||||
|
||||
@ -342,7 +342,7 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
#if (DBVER >=52)
|
||||
ADD_INT(d, DB_EVENT_REP_SITE_ADDED);
|
||||
ADD_INT(d, DB_EVENT_REP_SITE_REMOVED);
|
||||
@@ -10136,6 +10210,20 @@ PyMODINIT_FUNC PyInit__bsddb(void) /
|
||||
@@ -10128,6 +10202,20 @@ PyMODINIT_FUNC PyInit__bsddb(void) /
|
||||
ADD_INT(d, DB_REP_CONF_INMEM);
|
||||
#endif
|
||||
|
||||
@ -363,10 +363,10 @@ Index: Python-2.7.5/Modules/_bsddb.c
|
||||
ADD_INT(d, DB_TIMEOUT);
|
||||
|
||||
#if (DBVER >= 50)
|
||||
Index: Python-2.7.5/Modules/bsddb.h
|
||||
Index: Python-2.7.14/Modules/bsddb.h
|
||||
===================================================================
|
||||
--- Python-2.7.5.orig/Modules/bsddb.h
|
||||
+++ Python-2.7.5/Modules/bsddb.h
|
||||
--- Python-2.7.14.orig/Modules/bsddb.h
|
||||
+++ Python-2.7.14/Modules/bsddb.h
|
||||
@@ -110,7 +110,7 @@
|
||||
#error "eek! DBVER can't handle minor versions > 9"
|
||||
#endif
|
||||
@ -376,11 +376,11 @@ Index: Python-2.7.5/Modules/bsddb.h
|
||||
|
||||
/* Python object definitions */
|
||||
|
||||
Index: Python-2.7.5/setup.py
|
||||
Index: Python-2.7.14/setup.py
|
||||
===================================================================
|
||||
--- Python-2.7.5.orig/setup.py
|
||||
+++ Python-2.7.5/setup.py
|
||||
@@ -879,7 +879,7 @@ class PyBuildExt(build_ext):
|
||||
--- Python-2.7.14.orig/setup.py
|
||||
+++ Python-2.7.14/setup.py
|
||||
@@ -905,7 +905,7 @@ class PyBuildExt(build_ext):
|
||||
# a release. Most open source OSes come with one or more
|
||||
# versions of BerkeleyDB already installed.
|
||||
|
||||
@ -389,7 +389,7 @@ Index: Python-2.7.5/setup.py
|
||||
min_db_ver = (4, 3)
|
||||
db_setup_debug = False # verbose debug prints from this script?
|
||||
|
||||
@@ -919,6 +919,7 @@ class PyBuildExt(build_ext):
|
||||
@@ -945,6 +945,7 @@ class PyBuildExt(build_ext):
|
||||
# construct a list of paths to look for the header file in on
|
||||
# top of the normal inc_dirs.
|
||||
db_inc_paths = [
|
||||
@ -397,7 +397,7 @@ Index: Python-2.7.5/setup.py
|
||||
'/usr/include/db4',
|
||||
'/usr/local/include/db4',
|
||||
'/opt/sfw/include/db4',
|
||||
@@ -958,6 +959,7 @@ class PyBuildExt(build_ext):
|
||||
@@ -984,6 +985,7 @@ class PyBuildExt(build_ext):
|
||||
for dn in inc_dirs:
|
||||
std_variants.append(os.path.join(dn, 'db3'))
|
||||
std_variants.append(os.path.join(dn, 'db4'))
|
||||
|
@ -1,3 +1,16 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Nov 20 16:11:48 UTC 2017 - jmatejek@suse.com
|
||||
|
||||
- update to 2.7.14
|
||||
* dozens of bugfixes, see NEWS for details
|
||||
* fixed possible integer overflow in PyString_DecodeEscape (CVE-2017-1000158, bsc#1068664)
|
||||
* fixed segfaults with dict mutated during search
|
||||
* fixed possible free-after-use problems with buffer objects with custom indexing
|
||||
* fixed urllib.splithost to correctly parse fragments (bpo-30500)
|
||||
- drop upstreamed python-2.7.13-overflow_check.patch
|
||||
- drop unneeded python-2.7.12-makeopcode.patch
|
||||
- drop upstreamed 0001-2.7-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3094.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jan 3 17:42:16 UTC 2017 - jmatejek@suse.com
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
|
||||
Name: python-doc
|
||||
Version: 2.7.13
|
||||
Version: 2.7.14
|
||||
Release: 0
|
||||
Summary: Additional Package Documentation for Python
|
||||
License: Python-2.0
|
||||
@ -55,11 +55,8 @@ Patch33: python-2.7.9-ssl_ca_path.patch
|
||||
Patch34: python-2.7.9-sles-disable-verification-by-default.patch
|
||||
# PATCH-FIX-UPSTREAM python-ncurses-6.0-accessors.patch dimstar@opensuse.org -- Fix build with NCurses 6.0 and OPAQUE_WINDOW set to 1
|
||||
Patch35: python-ncurses-6.0-accessors.patch
|
||||
Patch36: python-2.7.13-overflow_check.patch
|
||||
Patch37: python-2.7.12-makeopcode.patch
|
||||
# PATCH-FIX-UPSTREAM bmwiedemann@suse.de -- allow python packages to build reproducibly
|
||||
Patch38: reproducible.patch
|
||||
Patch39: 0001-2.7-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3094.patch
|
||||
# COMMON-PATCH-END
|
||||
Provides: pyth_doc
|
||||
Provides: pyth_ps
|
||||
@ -108,10 +105,7 @@ Python, and Macintosh Module Reference in PDF format.
|
||||
%patch34 -p1
|
||||
%endif
|
||||
%patch35 -p1
|
||||
%patch36 -p1
|
||||
%patch37 -p1
|
||||
%patch38 -p1
|
||||
%patch39 -p1
|
||||
|
||||
# drop Autoconf version requirement
|
||||
sed -i 's/^version_required/dnl version_required/' configure.ac
|
||||
|
@ -1,3 +1,16 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Nov 20 16:11:48 UTC 2017 - jmatejek@suse.com
|
||||
|
||||
- update to 2.7.14
|
||||
* dozens of bugfixes, see NEWS for details
|
||||
* fixed possible integer overflow in PyString_DecodeEscape (CVE-2017-1000158, bsc#1068664)
|
||||
* fixed segfaults with dict mutated during search
|
||||
* fixed possible free-after-use problems with buffer objects with custom indexing
|
||||
* fixed urllib.splithost to correctly parse fragments (bpo-30500)
|
||||
- drop upstreamed python-2.7.13-overflow_check.patch
|
||||
- drop unneeded python-2.7.12-makeopcode.patch
|
||||
- drop upstreamed 0001-2.7-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3094.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Sep 14 14:12:38 UTC 2017 - vcizek@suse.com
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
|
||||
Name: python
|
||||
Version: 2.7.13
|
||||
Version: 2.7.14
|
||||
Release: 0
|
||||
Summary: Python Interpreter
|
||||
License: Python-2.0
|
||||
@ -60,11 +60,8 @@ Patch33: python-2.7.9-ssl_ca_path.patch
|
||||
Patch34: python-2.7.9-sles-disable-verification-by-default.patch
|
||||
# PATCH-FIX-UPSTREAM python-ncurses-6.0-accessors.patch dimstar@opensuse.org -- Fix build with NCurses 6.0 and OPAQUE_WINDOW set to 1
|
||||
Patch35: python-ncurses-6.0-accessors.patch
|
||||
Patch36: python-2.7.13-overflow_check.patch
|
||||
Patch37: python-2.7.12-makeopcode.patch
|
||||
# PATCH-FIX-UPSTREAM bmwiedemann@suse.de -- allow python packages to build reproducibly
|
||||
Patch38: reproducible.patch
|
||||
Patch39: 0001-2.7-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-3094.patch
|
||||
# COMMON-PATCH-END
|
||||
BuildRequires: automake
|
||||
BuildRequires: db-devel
|
||||
@ -214,10 +211,7 @@ that rely on earlier non-verification behavior.
|
||||
%patch34 -p1
|
||||
%endif
|
||||
%patch35 -p1
|
||||
%patch36 -p1
|
||||
%patch37 -p1
|
||||
%patch38 -p1
|
||||
%patch39 -p1
|
||||
|
||||
# drop Autoconf version requirement
|
||||
sed -i 's/^version_required/dnl version_required/' configure.ac
|
||||
|
Loading…
x
Reference in New Issue
Block a user