From 71551512cde05b8598781c44ad2a6a7aadc297235103c2c58b003500deb94f55 Mon Sep 17 00:00:00 2001 From: Jan Matejek Date: Fri, 20 Jun 2014 13:47:06 +0000 Subject: [PATCH] - update to 2.7.7 * bugfix-only release, over a hundred bugs fixed * backported hmac.compare_digest from python3, first step of PEP 466 - drop upstreamed patches: * CVE-2014-1912-recvfrom_into.patch * python-2.7.4-no-REUSEPORT.patch * python-2.7.6-bdist-rpm.patch * python-2.7.6-imaplib.patch * python-2.7.6-sqlite-3.8.4-tests.patch - refresh patches: * python-2.7.3-ssl_ca_path.patch * python-2.7.4-canonicalize2.patch * xmlrpc_gzip_27.patch - added python keyring and signature for the main tarball - update to 2.7.7 - update to 2.7.7 * bugfix-only release, over a hundred bugs fixed OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python?expand=0&rev=165 --- CVE-2014-1912-recvfrom_into.patch | 56 ----------- Python-2.7.6.tar.xz | 3 - Python-2.7.7.tar.xz | 3 + Python-2.7.7.tar.xz.asc | 17 ++++ python-2.7.3-ssl_ca_path.patch | 12 +-- python-2.7.4-canonicalize2.patch | 32 +++--- python-2.7.4-no-REUSEPORT.patch | 19 ---- python-2.7.6-bdist-rpm.patch | 12 --- python-2.7.6-docs-html.tar.bz2 | 3 - python-2.7.6-docs-pdf-a4.tar.bz2 | 3 - python-2.7.6-docs-pdf-letter.tar.bz2 | 3 - python-2.7.6-imaplib.patch | 59 ------------ python-2.7.6-sqlite-3.8.4-tests.patch | 30 ------ python-2.7.7-docs-html.tar.bz2 | 3 + python-2.7.7-docs-pdf-a4.tar.bz2 | 3 + python-2.7.7-docs-pdf-letter.tar.bz2 | 3 + python-base.changes | 18 ++++ python-base.spec | 16 +-- python-doc.changes | 5 + python-doc.spec | 14 +-- python.changes | 6 ++ python.keyring | Bin 0 -> 269747 bytes python.spec | 14 +-- xmlrpc_gzip_27.patch | 134 ++++++++++++-------------- 24 files changed, 150 insertions(+), 318 deletions(-) delete mode 100644 CVE-2014-1912-recvfrom_into.patch delete mode 100644 Python-2.7.6.tar.xz create mode 100644 Python-2.7.7.tar.xz create mode 100644 Python-2.7.7.tar.xz.asc delete mode 100644 python-2.7.4-no-REUSEPORT.patch delete mode 100644 python-2.7.6-bdist-rpm.patch delete mode 100644 python-2.7.6-docs-html.tar.bz2 delete mode 100644 python-2.7.6-docs-pdf-a4.tar.bz2 delete mode 100644 python-2.7.6-docs-pdf-letter.tar.bz2 delete mode 100644 python-2.7.6-imaplib.patch delete mode 100644 python-2.7.6-sqlite-3.8.4-tests.patch create mode 100644 python-2.7.7-docs-html.tar.bz2 create mode 100644 python-2.7.7-docs-pdf-a4.tar.bz2 create mode 100644 python-2.7.7-docs-pdf-letter.tar.bz2 create mode 100644 python.keyring diff --git a/CVE-2014-1912-recvfrom_into.patch b/CVE-2014-1912-recvfrom_into.patch deleted file mode 100644 index e3029f7..0000000 --- a/CVE-2014-1912-recvfrom_into.patch +++ /dev/null @@ -1,56 +0,0 @@ - -# HG changeset patch -# User Benjamin Peterson -# Date 1389671978 18000 -# Node ID 87673659d8f7ba1623cd4914f09ad3d2ade034e9 -# Parent 2631d33ee7fbd5f0288931ef37872218d511d2e8 -complain when nbytes > buflen to fix possible buffer overflow (closes #20246) - -Index: Python-2.7.6/Lib/test/test_socket.py -=================================================================== ---- Python-2.7.6.orig/Lib/test/test_socket.py 2013-11-10 08:36:40.000000000 +0100 -+++ Python-2.7.6/Lib/test/test_socket.py 2014-02-13 18:04:12.710244327 +0100 -@@ -1616,6 +1616,16 @@ - - _testRecvFromIntoMemoryview = _testRecvFromIntoArray - -+ def testRecvFromIntoSmallBuffer(self): -+ # See issue #20246. -+ buf = bytearray(8) -+ self.assertRaises(ValueError, self.cli_conn.recvfrom_into, buf, 1024) -+ -+ def _testRecvFromIntoSmallBuffer(self): -+ with test_support.check_py3k_warnings(): -+ buf = buffer(MSG) -+ self.serv_conn.send(buf) -+ - - TIPC_STYPE = 2000 - TIPC_LOWER = 200 -Index: Python-2.7.6/Misc/ACKS -=================================================================== ---- Python-2.7.6.orig/Misc/ACKS 2013-11-10 08:36:41.000000000 +0100 -+++ Python-2.7.6/Misc/ACKS 2014-02-13 18:04:12.710244327 +0100 -@@ -973,6 +973,7 @@ - Christopher Smith - Gregory P. Smith - Roy Smith -+Ryan Smith-Roberts - Rafal Smotrzyk - Dirk Soede - Paul Sokolovsky -Index: Python-2.7.6/Modules/socketmodule.c -=================================================================== ---- Python-2.7.6.orig/Modules/socketmodule.c 2013-11-10 08:36:41.000000000 +0100 -+++ Python-2.7.6/Modules/socketmodule.c 2014-02-13 18:04:12.711244332 +0100 -@@ -2742,6 +2742,10 @@ - if (recvlen == 0) { - /* If nbytes was not specified, use the buffer's length */ - recvlen = buflen; -+ } else if (recvlen > buflen) { -+ PyErr_SetString(PyExc_ValueError, -+ "nbytes is greater than the length of the buffer"); -+ goto error; - } - - readlen = sock_recvfrom_guts(s, buf.buf, recvlen, flags, &addr); diff --git a/Python-2.7.6.tar.xz b/Python-2.7.6.tar.xz deleted file mode 100644 index 4914970..0000000 --- a/Python-2.7.6.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1fd68e81f8bf7386ff239b7faee9ba387129d2cf34eab13350bd8503a0bff6a1 -size 10431288 diff --git a/Python-2.7.7.tar.xz b/Python-2.7.7.tar.xz new file mode 100644 index 0000000..f90ee16 --- /dev/null +++ b/Python-2.7.7.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2983e3cd089b30c50e2b2234f07c2ac4fb8a5df230ab8f2e1133a1d8b208da78 +size 10496500 diff --git a/Python-2.7.7.tar.xz.asc b/Python-2.7.7.tar.xz.asc new file mode 100644 index 0000000..bdd2220 --- /dev/null +++ b/Python-2.7.7.tar.xz.asc @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v2.0.22 (GNU/Linux) + +iQIcBAABAgAGBQJTiinXAAoJEATDZ8IYrdT/rp4P/Rnl1l4O3LgrL+F96ASNqzRJ +b2lxcgEzbiuSCxYTsHrNb8nElcl2XozkDb3IOGT9s2dpl0NobcrYkQ5ia0/Tk6XP +mJ4B99mIiFJfAssBBIZglG6I2xiJHaV/XNzZj6NIvGrvyyeuW8GqOOG1KDME4UyQ +JRqnozC0O1YNzaHmppDjRaKea9ualmmLiAC3N2J6svtB97AkKrUsxFPdqLso776T +119ZlZ6MEQx5hs8YgJ+J62gBKzkP/m2yiSu0tf36QUxsYISWlbwjyvqS6cuzRNjl +VXlXyKTq7RcU/10VvLYENnA0U5dXIFKZv4BWCj/4wHmujEz2DenwziXUVb38ot+K +bAXk9OMUVHzzFwny0pLbQxFXOAXopUx3qtcwXSiOoaK72VxqhKqLH/UP6rL7n3tn +Un4wpNYA6pd3O4dZVIbZ3IjfueTasGdKdX6DxLjlvD916w0+zeiYZeohCe/HeT93 ++Yp4tibpexHPqgln+6/M17Oj8ungqyuD6Y91mPyfOhr8FoPK1z/NyLQit8f97Mkl +OJkqOfqoNfOxPPuP1oiN4rb4EttkmFtJ45BOsfsksXDF9IIDKwonOSxDbeTekW8Z +RGg2FKXFsnOSpH+NcEkPizY5vsYB7DUH7NB992ovZmUUmUuAS6n0wNyiUqwtQN60 +sFbdz+EXOO6KTcQx0y3z +=tcoa +-----END PGP SIGNATURE----- diff --git a/python-2.7.3-ssl_ca_path.patch b/python-2.7.3-ssl_ca_path.patch index dd73ebc..32d6b2a 100644 --- a/python-2.7.3-ssl_ca_path.patch +++ b/python-2.7.3-ssl_ca_path.patch @@ -1,16 +1,16 @@ -Index: Python-2.7.5/Modules/_ssl.c +Index: Python-2.7.7/Modules/_ssl.c =================================================================== ---- Python-2.7.5.orig/Modules/_ssl.c -+++ Python-2.7.5/Modules/_ssl.c -@@ -271,6 +271,7 @@ newPySSLObject(PySocketSockObject *Sock, +--- Python-2.7.7.orig/Modules/_ssl.c 2014-06-20 14:34:28.157656595 +0200 ++++ Python-2.7.7/Modules/_ssl.c 2014-06-20 14:35:20.092929774 +0200 +@@ -273,6 +273,7 @@ char *errstr = NULL; int ret; int verification_mode; + struct stat stat_buf; + long options; self = PyObject_New(PySSLObject, &PySSL_Type); /* Create new object */ - if (self == NULL) -@@ -327,20 +328,32 @@ newPySSLObject(PySocketSockObject *Sock, +@@ -331,20 +332,32 @@ if (certreq != PY_SSL_CERT_NONE) { if (cacerts_file == NULL) { diff --git a/python-2.7.4-canonicalize2.patch b/python-2.7.4-canonicalize2.patch index c47d933..d8c83f4 100644 --- a/python-2.7.4-canonicalize2.patch +++ b/python-2.7.4-canonicalize2.patch @@ -1,6 +1,8 @@ ---- a/Python/sysmodule.c -+++ b/Python/sysmodule.c -@@ -1620,7 +1620,20 @@ +Index: Python-2.7.7/Python/sysmodule.c +=================================================================== +--- Python-2.7.7.orig/Python/sysmodule.c 2014-06-20 14:33:06.696228064 +0200 ++++ Python-2.7.7/Python/sysmodule.c 2014-06-20 14:33:10.960250497 +0200 +@@ -1624,7 +1624,20 @@ char *p = NULL; Py_ssize_t n = 0; PyObject *a; @@ -22,7 +24,7 @@ char link[MAXPATHLEN+1]; char argv0copy[2*MAXPATHLEN+1]; int nr = 0; -@@ -1647,7 +1660,8 @@ +@@ -1651,7 +1664,8 @@ } } } @@ -32,7 +34,7 @@ #if SEP == '\\' /* Special case for MS filename syntax */ if (argc > 0 && argv0 != NULL && strcmp(argv0, "-c") != 0) { char *q; -@@ -1676,11 +1690,6 @@ +@@ -1680,11 +1694,6 @@ } #else /* All other filename syntaxes */ if (argc > 0 && argv0 != NULL && strcmp(argv0, "-c") != 0) { @@ -44,7 +46,7 @@ p = strrchr(argv0, SEP); } if (p != NULL) { -@@ -1698,6 +1707,9 @@ +@@ -1702,6 +1711,9 @@ a = PyString_FromStringAndSize(argv0, n); if (a == NULL) Py_FatalError("no mem for sys.path insertion"); @@ -54,9 +56,11 @@ if (PyList_Insert(path, 0, a) < 0) Py_FatalError("sys.path.insert(0) failed"); Py_DECREF(a); ---- a/pyconfig.h.in -+++ b/pyconfig.h.in -@@ -106,6 +106,9 @@ +Index: Python-2.7.7/pyconfig.h.in +=================================================================== +--- Python-2.7.7.orig/pyconfig.h.in 2014-05-31 20:58:40.000000000 +0200 ++++ Python-2.7.7/pyconfig.h.in 2014-06-20 14:33:10.961250502 +0200 +@@ -109,6 +109,9 @@ /* Define to 1 if you have the 'chflags' function. */ #undef HAVE_CHFLAGS @@ -66,11 +70,13 @@ /* Define to 1 if you have the `chown' function. */ #undef HAVE_CHOWN ---- a/configure.ac -+++ b/configure.ac -@@ -2913,7 +2913,7 @@ +Index: Python-2.7.7/configure.ac +=================================================================== +--- Python-2.7.7.orig/configure.ac 2014-06-20 14:33:06.694228054 +0200 ++++ Python-2.7.7/configure.ac 2014-06-20 14:33:10.961250502 +0200 +@@ -2935,7 +2935,7 @@ getpriority getresuid getresgid getpwent getspnam getspent getsid getwd \ - initgroups kill killpg lchmod lchown lstat mkfifo mknod mktime \ + initgroups kill killpg lchmod lchown lstat mkfifo mknod mktime mmap \ mremap nice pathconf pause plock poll pthread_init \ - putenv readlink realpath \ + putenv readlink realpath canonicalize_file_name \ diff --git a/python-2.7.4-no-REUSEPORT.patch b/python-2.7.4-no-REUSEPORT.patch deleted file mode 100644 index 46cf4f3..0000000 --- a/python-2.7.4-no-REUSEPORT.patch +++ /dev/null @@ -1,19 +0,0 @@ -Index: Python-2.7.4/Lib/test/test_support.py -=================================================================== ---- Python-2.7.4.orig/Lib/test/test_support.py 2013-04-06 16:02:32.000000000 +0200 -+++ Python-2.7.4/Lib/test/test_support.py 2013-05-09 17:46:46.789663295 +0200 -@@ -371,10 +371,10 @@ - if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) == 1: - raise TestFailed("tests should never set the SO_REUSEADDR " \ - "socket option on TCP/IP sockets!") -- if hasattr(socket, 'SO_REUSEPORT'): -- if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 1: -- raise TestFailed("tests should never set the SO_REUSEPORT " \ -- "socket option on TCP/IP sockets!") -+# if hasattr(socket, 'SO_REUSEPORT'): -+# if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 1: -+# raise TestFailed("tests should never set the SO_REUSEPORT " \ -+# "socket option on TCP/IP sockets!") - if hasattr(socket, 'SO_EXCLUSIVEADDRUSE'): - sock.setsockopt(socket.SOL_SOCKET, socket.SO_EXCLUSIVEADDRUSE, 1) - diff --git a/python-2.7.6-bdist-rpm.patch b/python-2.7.6-bdist-rpm.patch deleted file mode 100644 index 465d388..0000000 --- a/python-2.7.6-bdist-rpm.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: Python-2.7.6/Lib/distutils/command/bdist_rpm.py -=================================================================== ---- Python-2.7.6.orig/Lib/distutils/command/bdist_rpm.py 2013-11-10 08:36:40.000000000 +0100 -+++ Python-2.7.6/Lib/distutils/command/bdist_rpm.py 2014-02-11 19:19:26.739708837 +0100 -@@ -14,6 +14,7 @@ - from distutils.file_util import write_file - from distutils.errors import (DistutilsOptionError, DistutilsPlatformError, - DistutilsFileError, DistutilsExecError) -+from distutils.sysconfig import get_python_version - from distutils import log - - class bdist_rpm (Command): diff --git a/python-2.7.6-docs-html.tar.bz2 b/python-2.7.6-docs-html.tar.bz2 deleted file mode 100644 index d9c47e4..0000000 --- a/python-2.7.6-docs-html.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b04dc7c5fa328ad9009cc0f43e2136ef14824246fc596fae0830bb5ece529ab3 -size 4482212 diff --git a/python-2.7.6-docs-pdf-a4.tar.bz2 b/python-2.7.6-docs-pdf-a4.tar.bz2 deleted file mode 100644 index 58244b9..0000000 --- a/python-2.7.6-docs-pdf-a4.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5ca5209a8cbf8d966eff6611cfe8accf38040a63534d5c050730fba47a24e703 -size 10321047 diff --git a/python-2.7.6-docs-pdf-letter.tar.bz2 b/python-2.7.6-docs-pdf-letter.tar.bz2 deleted file mode 100644 index 7c7bb15..0000000 --- a/python-2.7.6-docs-pdf-letter.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ff9b65247b5ad74a86793630eda5063af25b925bcc8dd2910765640a1463401d -size 10380021 diff --git a/python-2.7.6-imaplib.patch b/python-2.7.6-imaplib.patch deleted file mode 100644 index 5af60ab..0000000 --- a/python-2.7.6-imaplib.patch +++ /dev/null @@ -1,59 +0,0 @@ - -# HG changeset patch -# User R David Murray -# Date 1388775562 18000 -# Node ID dd906f4ab9237020a7a275c2d361fa288e553481 -# Parent 69b5f692455306c98aa27ecea17e6290787ebd3f -closes 16039: CVE-2013-1752: limit line length in imaplib readline calls. - -diff --git a/Lib/imaplib.py b/Lib/imaplib.py ---- a/Lib/imaplib.py -+++ b/Lib/imaplib.py -@@ -35,6 +35,15 @@ IMAP4_PORT = 143 - IMAP4_SSL_PORT = 993 - AllowedVersions = ('IMAP4REV1', 'IMAP4') # Most recent first - -+# Maximal line length when calling readline(). This is to prevent -+# reading arbitrary length lines. RFC 3501 and 2060 (IMAP 4rev1) -+# don't specify a line length. RFC 2683 however suggests limiting client -+# command lines to 1000 octets and server command lines to 8000 octets. -+# We have selected 10000 for some extra margin and since that is supposedly -+# also what UW and Panda IMAP does. -+_MAXLINE = 10000 -+ -+ - # Commands - - Commands = { -@@ -237,7 +246,10 @@ class IMAP4: - - def readline(self): - """Read line from remote.""" -- return self.file.readline() -+ line = self.file.readline(_MAXLINE + 1) -+ if len(line) > _MAXLINE: -+ raise self.error("got more than %d bytes" % _MAXLINE) -+ return line - - - def send(self, data): -diff --git a/Lib/test/test_imaplib.py b/Lib/test/test_imaplib.py ---- a/Lib/test/test_imaplib.py -+++ b/Lib/test/test_imaplib.py -@@ -165,6 +165,16 @@ class BaseThreadedNetworkedTests(unittes - self.imap_class, *server.server_address) - - -+ def test_linetoolong(self): -+ class TooLongHandler(SimpleIMAPHandler): -+ def handle(self): -+ # Send a very long response line -+ self.wfile.write('* OK ' + imaplib._MAXLINE*'x' + '\r\n') -+ -+ with self.reaped_server(TooLongHandler) as server: -+ self.assertRaises(imaplib.IMAP4.error, -+ self.imap_class, *server.server_address) -+ - class ThreadedNetworkedTests(BaseThreadedNetworkedTests): - - server_class = SocketServer.TCPServer diff --git a/python-2.7.6-sqlite-3.8.4-tests.patch b/python-2.7.6-sqlite-3.8.4-tests.patch deleted file mode 100644 index 7044b31..0000000 --- a/python-2.7.6-sqlite-3.8.4-tests.patch +++ /dev/null @@ -1,30 +0,0 @@ -From: Benjamin Peterson -Date: Wed, 12 Mar 2014 21:51:52 -0500 -Subject: [PATCH] weaken callback count inequality (closes #20901) -Upstream: committed -References: https://bugzilla.novell.com/show_bug.cgi?id=867887 http://bugs.python.org/issue20901 http://hg.python.org/cpython/rev/1763e27a182d - -Fixes test failures with SQLite 3.8.4 - -[ 296s] test test_sqlite failed -- Traceback (most recent call last): -[ 296s] File "/home/abuild/rpmbuild/BUILD/Python-2.7.6/Lib/sqlite3/test/hooks.py", line 165, in CheckOpcodeCount -[ 296s] self.assertTrue(first_count > second_count) -[ 296s] AssertionError: False is not true - ---- - Lib/sqlite3/test/hooks.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: Python-2.7.6/Lib/sqlite3/test/hooks.py -=================================================================== ---- Python-2.7.6.orig/Lib/sqlite3/test/hooks.py 2014-03-14 20:32:55.000000000 +0000 -+++ Python-2.7.6/Lib/sqlite3/test/hooks.py 2014-03-14 20:34:07.000000000 +0000 -@@ -162,7 +162,7 @@ class ProgressTests(unittest.TestCase): - create table bar (a, b) - """) - second_count = len(progress_calls) -- self.assertTrue(first_count > second_count) -+ self.assertTrue(first_count >= second_count) - - def CheckCancelOperation(self): - """ diff --git a/python-2.7.7-docs-html.tar.bz2 b/python-2.7.7-docs-html.tar.bz2 new file mode 100644 index 0000000..22f3ffa --- /dev/null +++ b/python-2.7.7-docs-html.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0086dea3641d7b311425339357c52dd2ba5694f0d4d2c9ae1782e898707a8bd6 +size 4494590 diff --git a/python-2.7.7-docs-pdf-a4.tar.bz2 b/python-2.7.7-docs-pdf-a4.tar.bz2 new file mode 100644 index 0000000..2f39d8b --- /dev/null +++ b/python-2.7.7-docs-pdf-a4.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fc5eef11803c9b84aaab30c09c20ffd492f105089fe918e93ec1d65b6b87a6a +size 10728634 diff --git a/python-2.7.7-docs-pdf-letter.tar.bz2 b/python-2.7.7-docs-pdf-letter.tar.bz2 new file mode 100644 index 0000000..73af103 --- /dev/null +++ b/python-2.7.7-docs-pdf-letter.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdc09f1a41744ac664d86241072f9525d2c6edb46919b0c197da0eb3e1ffff7d +size 10779787 diff --git a/python-base.changes b/python-base.changes index 1d02c55..f2c5770 100644 --- a/python-base.changes +++ b/python-base.changes @@ -1,3 +1,21 @@ +------------------------------------------------------------------- +Fri Jun 20 13:11:34 UTC 2014 - jmatejek@suse.com + +- update to 2.7.7 + * bugfix-only release, over a hundred bugs fixed + * backported hmac.compare_digest from python3, first step of PEP 466 +- drop upstreamed patches: + * CVE-2014-1912-recvfrom_into.patch + * python-2.7.4-no-REUSEPORT.patch + * python-2.7.6-bdist-rpm.patch + * python-2.7.6-imaplib.patch + * python-2.7.6-sqlite-3.8.4-tests.patch +- refresh patches: + * python-2.7.3-ssl_ca_path.patch + * python-2.7.4-canonicalize2.patch + * xmlrpc_gzip_27.patch +- added python keyring and signature for the main tarball + ------------------------------------------------------------------- Sat Mar 15 08:05:41 UTC 2014 - schwab@suse.de diff --git a/python-base.spec b/python-base.spec index 66f1a17..b1c9173 100644 --- a/python-base.spec +++ b/python-base.spec @@ -17,7 +17,7 @@ Name: python-base -Version: 2.7.6 +Version: 2.7.7 Release: 0 Summary: Python Interpreter base package License: Python-2.0 @@ -26,6 +26,8 @@ Url: http://www.python.org/ %define tarversion %{version} %define tarname Python-%{tarversion} Source0: http://www.python.org/ftp/python/%{version}/%{tarname}.tar.xz +Source4: http://www.python.org/ftp/python/%{version}/%{tarname}.tar.xz.asc +Source6: python.keyring Source1: macros.python Source2: baselibs.conf Source3: README.SUSE @@ -47,21 +49,14 @@ Patch18: python-2.7.3-ssl_ca_path.patch Patch20: python-bundle-lang.patch # PATCH-FIX-OPENSUSE Properly support aarch64 in _ctypes module Patch22: python-2.7.4-aarch64.patch -Patch23: python-2.7.4-no-REUSEPORT.patch Patch24: python-bsddb6.diff # PATCH-FIX-OPENSUSE Properly support ppc64le in _ctypes module Patch25: libffi-ppc64le.diff # CVE-2013-1753 [bnc#856835] unbounded gzip decompression in xmlrpc client Patch26: xmlrpc_gzip_27.patch # CVE-2013-1752 patches missing in 2.7.6: imaplib, poplib, smtplib -Patch27: python-2.7.6-imaplib.patch Patch28: smtplib_maxline-2.7.patch Patch29: python-2.7.6-poplib.patch -# [bnc#857470] add missing import to bdist_rpm command -Patch30: python-2.7.6-bdist-rpm.patch -# CVE-2014-1912 [bnc#863741] buffer overflow in recvfrom_into -Patch31: CVE-2014-1912-recvfrom_into.patch -Patch32: python-2.7.6-sqlite-3.8.4-tests.patch # COMMON-PATCH-END %define python_version %(echo %{tarversion} | head -c 3) BuildRequires: automake @@ -149,16 +144,11 @@ other applications. %patch18 -p1 %patch20 -p1 %patch22 -p1 -%patch23 -p1 %patch24 -p1 %patch25 -p0 %patch26 -p1 -%patch27 -p1 %patch28 -p1 %patch29 -p1 -%patch30 -p1 -%patch31 -p1 -%patch32 -p1 # drop Autoconf version requirement sed -i 's/^version_required/dnl version_required/' configure.ac diff --git a/python-doc.changes b/python-doc.changes index e9ba256..79a03ed 100644 --- a/python-doc.changes +++ b/python-doc.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Fri Jun 20 13:46:40 UTC 2014 - jmatejek@suse.com + +- update to 2.7.7 + ------------------------------------------------------------------- Fri Mar 14 20:26:03 UTC 2014 - andreas.stieger@gmx.de diff --git a/python-doc.spec b/python-doc.spec index 70a7deb..9f1d023 100644 --- a/python-doc.spec +++ b/python-doc.spec @@ -16,7 +16,7 @@ # Name: python-doc -Version: 2.7.6 +Version: 2.7.7 Release: 0 Summary: Additional Package Documentation for Python License: Python-2.0 @@ -52,21 +52,14 @@ Patch18: python-2.7.3-ssl_ca_path.patch Patch20: python-bundle-lang.patch # PATCH-FIX-OPENSUSE Properly support aarch64 in _ctypes module Patch22: python-2.7.4-aarch64.patch -Patch23: python-2.7.4-no-REUSEPORT.patch Patch24: python-bsddb6.diff # PATCH-FIX-OPENSUSE Properly support ppc64le in _ctypes module Patch25: libffi-ppc64le.diff # CVE-2013-1753 [bnc#856835] unbounded gzip decompression in xmlrpc client Patch26: xmlrpc_gzip_27.patch # CVE-2013-1752 patches missing in 2.7.6: imaplib, poplib, smtplib -Patch27: python-2.7.6-imaplib.patch Patch28: smtplib_maxline-2.7.patch Patch29: python-2.7.6-poplib.patch -# [bnc#857470] add missing import to bdist_rpm command -Patch30: python-2.7.6-bdist-rpm.patch -# CVE-2014-1912 [bnc#863741] buffer overflow in recvfrom_into -Patch31: CVE-2014-1912-recvfrom_into.patch -Patch32: python-2.7.6-sqlite-3.8.4-tests.patch # COMMON-PATCH-END Provides: pyth_doc Provides: pyth_ps @@ -108,16 +101,11 @@ Python, and Macintosh Module Reference in PDF format. %patch18 -p1 %patch20 -p1 %patch22 -p1 -%patch23 -p1 %patch24 -p1 %patch25 -p0 %patch26 -p1 -%patch27 -p1 %patch28 -p1 %patch29 -p1 -%patch30 -p1 -%patch31 -p1 -%patch32 -p1 # drop Autoconf version requirement sed -i 's/^version_required/dnl version_required/' configure.ac diff --git a/python.changes b/python.changes index ddb7264..2051f51 100644 --- a/python.changes +++ b/python.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Fri Jun 20 13:46:22 UTC 2014 - jmatejek@suse.com + +- update to 2.7.7 + * bugfix-only release, over a hundred bugs fixed + ------------------------------------------------------------------- Fri Mar 14 20:26:03 UTC 2014 - andreas.stieger@gmx.de diff --git a/python.keyring b/python.keyring new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..9893ebe13385d2b15ed97f74d9fa6ae7623f60ed6adf271c5bb52897f8230b35 GIT binary patch literal 269747 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