diff options
author | Nicolás Reynolds <fauno@endefensadelsl.org> | 2013-10-08 22:20:37 -0300 |
---|---|---|
committer | Nicolás Reynolds <fauno@endefensadelsl.org> | 2013-10-08 22:20:37 -0300 |
commit | fccf9769e2c26f577f6214ed9d0dbb30cb8c51bd (patch) | |
tree | cc5312eeed95e18d8e2c6009c568f3d32501bc01 /extra/python2 | |
parent | 69962c022fb4ed68b9163e60183fff714308e4e3 (diff) | |
parent | 3a0ad5dc35d5cff379cdfc736b9cae856416fe6a (diff) |
Merge branch 'master' of ssh://vparabola/home/parabola/abslibre-pre-mips64el
Conflicts:
community/abe/PKGBUILD
community/account-plugins/PKGBUILD
community/adesklets/PKGBUILD
community/aircrack-ng/PKGBUILD
community/audit/PKGBUILD
community/bchunk/PKGBUILD
community/bibutils/PKGBUILD
community/cantata/PKGBUILD
community/cdck/PKGBUILD
community/cinnamon-control-center/PKGBUILD
community/clusterssh/PKGBUILD
community/consonance/PKGBUILD
community/credentials-preferences/PKGBUILD
community/dee/PKGBUILD
community/dosbox/PKGBUILD
community/drbd/PKGBUILD
community/dvdisaster/PKGBUILD
community/ekg/PKGBUILD
community/ekg2/PKGBUILD
community/emelfm2/PKGBUILD
community/erlang/PKGBUILD
community/ettercap/PKGBUILD
community/evilwm/PKGBUILD
community/fatrat/PKGBUILD
community/fcitx-mozc/PKGBUILD
community/fcrackzip/PKGBUILD
community/ffmpegsource/PKGBUILD
community/fssos-nsvs/PKGBUILD
community/geda-gaf/PKGBUILD
community/gnome-applets/PKGBUILD
community/gnome-panel/PKGBUILD
community/gnustep-make/PKGBUILD
community/gwibber/PKGBUILD
community/html2text/PKGBUILD
community/intellij-idea-libs/PKGBUILD
community/libcgns2/PKGBUILD
community/libmatio/PKGBUILD
community/librcc/PKGBUILD
community/libsignon-glib/PKGBUILD
community/linux-tools/PKGBUILD
community/minitube/PKGBUILD
community/mpdscribble/PKGBUILD
community/mplayer2/PKGBUILD
community/musepack-tools/PKGBUILD
community/nginx/PKGBUILD
community/pam_pwcheck/PKGBUILD
community/portaudio/PKGBUILD
community/portaudio_cpp/PKGBUILD
community/prelink/PKGBUILD
community/projectm/PKGBUILD
community/prosody/PKGBUILD
community/python-basemap/PKGBUILD
community/qgit/PKGBUILD
community/raptor1/PKGBUILD
community/sensors-applet/PKGBUILD
community/signon-keyring-extension/PKGBUILD
community/signon-plugin-oauth2/PKGBUILD
community/signon-ui/PKGBUILD
community/sshguard/PKGBUILD
community/tea/PKGBUILD
community/tint2/PKGBUILD
community/tremulous/PKGBUILD
community/vobcopy/PKGBUILD
community/windowlab/PKGBUILD
community/xdelta/PKGBUILD
community/xmms2/PKGBUILD
community/xosd/PKGBUILD
core/gdbm/PKGBUILD
core/heirloom-mailx/PKGBUILD
core/libffi/PKGBUILD
core/procps-ng/PKGBUILD
core/systemd/PKGBUILD
core/tar/PKGBUILD
cross/mips64el-unknown-linux-gnu-linux-libre-api-headers/PKGBUILD
extra/arj/PKGBUILD
extra/audacity/PKGBUILD
extra/cdparanoia/PKGBUILD
extra/elfutils/PKGBUILD
extra/fltk/PKGBUILD
extra/gnome-python-desktop/PKGBUILD
extra/gstreamer/PKGBUILD
extra/gtk2/PKGBUILD
extra/gvfs/PKGBUILD
extra/imagemagick/PKGBUILD
extra/indent/PKGBUILD
extra/kdepim/PKGBUILD
extra/lcms/PKGBUILD
extra/lesstif/PKGBUILD
extra/libchewing/PKGBUILD
extra/libdrm/PKGBUILD
extra/libmodplug/PKGBUILD
extra/libnotify/PKGBUILD
extra/libsm/PKGBUILD
extra/libxmu/PKGBUILD
extra/libxpm/PKGBUILD
extra/mariadb/PKGBUILD
extra/mesa/PKGBUILD
extra/mkvtoolnix/PKGBUILD
extra/neon/PKGBUILD
extra/ocaml/PKGBUILD
extra/phonon-vlc/PKGBUILD
extra/php-xcache/PKGBUILD
extra/polkit/PKGBUILD
extra/pycups/PKGBUILD
extra/python-cairo/PKGBUILD
extra/python/PKGBUILD
extra/ruby/PKGBUILD
extra/sqlite/PKGBUILD
extra/talloc/PKGBUILD
extra/thunar-archive-plugin/PKGBUILD
extra/totem-plparser/PKGBUILD
extra/totem/PKGBUILD
extra/vinagre/PKGBUILD
extra/vino/PKGBUILD
extra/vlc/PKGBUILD
extra/wget/PKGBUILD
extra/xine-lib/PKGBUILD
extra/xorg-server/PKGBUILD
extra/xorg-twm/PKGBUILD
extra/xorg-xclipboard/PKGBUILD
extra/xorg-xclock/PKGBUILD
extra/xorg-xkill/PKGBUILD
extra/xorg-xlsclients/PKGBUILD
extra/xorg-xman/PKGBUILD
extra/xorg-xrdb/PKGBUILD
extra/xpdf/PKGBUILD
extra/xvidcore/PKGBUILD
extra/yelp/PKGBUILD
libre/audacious-plugins-libre/PKGBUILD
libre/mc-libre/PKGBUILD
libre/python2-reportlab-libre/PKGBUILD
Diffstat (limited to 'extra/python2')
-rw-r--r-- | extra/python2/PKGBUILD | 21 | ||||
-rw-r--r-- | extra/python2/python-2.7.5-CVE-2013-4238.patch | 267 |
2 files changed, 282 insertions, 6 deletions
diff --git a/extra/python2/PKGBUILD b/extra/python2/PKGBUILD index 440e51d2f..15770f376 100644 --- a/extra/python2/PKGBUILD +++ b/extra/python2/PKGBUILD @@ -1,27 +1,32 @@ -# $Id: PKGBUILD 185697 2013-05-17 11:13:51Z stephane $ +# $Id: PKGBUILD 193929 2013-09-06 08:06:17Z bpiotrowski $ # Maintainer: Stéphane Gaudreault <stephane@archlinux.org> # Contributer: Allan McRae <allan@archlinux.org> # Contributer: Jason Chu <jason@archlinux.org> pkgname=python2 pkgver=2.7.5 -pkgrel=1 +pkgrel=2 _pybasever=2.7 pkgdesc="A high-level scripting language" arch=('i686' 'x86_64' 'mips64el') license=('PSF') url="http://www.python.org/" depends=('bzip2' 'gdbm' 'openssl' 'zlib' 'expat' 'sqlite' 'libffi') -makedepends=('tk>=8.6.0' 'bluez') +makedepends=('tk>=8.6.0' 'bluez-libs') optdepends=('tk: for IDLE') conflicts=('python<3') options=('!makeflags') -source=(http://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz) -sha1sums=('b7389791f789625c2ba9d897aa324008ff482daf') +source=(http://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz + python-2.7.5-CVE-2013-4238.patch) +sha1sums=('b7389791f789625c2ba9d897aa324008ff482daf' + 'fb1f95ca21d9c00eaaea5a58236d1d97300482d7') -build() { +prepare() { cd "${srcdir}/Python-${pkgver}" + # http://bugs.python.org/issue18709 + patch -Np1 -i ../python-2.7.5-CVE-2013-4238.patch + # Temporary workaround for FS#22322 # See http://bugs.python.org/issue10835 for upstream report sed -i "/progname =/s/python/python${_pybasever}/" Python/pythonrun.c @@ -40,6 +45,10 @@ build() { rm -r Modules/expat rm -r Modules/zlib rm -r Modules/_ctypes/{darwin,libffi}* +} + +build() { + cd "${srcdir}/Python-${pkgver}" export OPT="${CFLAGS}" ./configure --prefix=/usr --enable-shared --with-threads --enable-ipv6 \ diff --git a/extra/python2/python-2.7.5-CVE-2013-4238.patch b/extra/python2/python-2.7.5-CVE-2013-4238.patch new file mode 100644 index 000000000..c37190182 --- /dev/null +++ b/extra/python2/python-2.7.5-CVE-2013-4238.patch @@ -0,0 +1,267 @@ + +# HG changeset patch +# User Christian Heimes <christian@cheimes.de> +# Date 1376693687 -7200 +# Node ID bd2360476bdbb1477b81b0e18b8d86b3452ba77b +# Parent 87fcc13ade91874971ad577efaa2254c744a2b07 +Issue #18709: Fix CVE-2013-4238. The SSL module now handles NULL bytes +inside subjectAltName correctly. Formerly the module has used OpenSSL's +GENERAL_NAME_print() function to get the string represention of ASN.1 +strings for rfc822Name (email), dNSName (DNS) and +uniformResourceIdentifier (URI). + +diff --git a/Lib/test/nullbytecert.pem b/Lib/test/nullbytecert.pem +new file mode 100644 +--- /dev/null ++++ b/Lib/test/nullbytecert.pem +@@ -0,0 +1,90 @@ ++Certificate: ++ Data: ++ Version: 3 (0x2) ++ Serial Number: 0 (0x0) ++ Signature Algorithm: sha1WithRSAEncryption ++ Issuer: C=US, ST=Oregon, L=Beaverton, O=Python Software Foundation, OU=Python Core Development, CN=null.python.org\x00example.org/emailAddress=python-dev@python.org ++ Validity ++ Not Before: Aug 7 13:11:52 2013 GMT ++ Not After : Aug 7 13:12:52 2013 GMT ++ Subject: C=US, ST=Oregon, L=Beaverton, O=Python Software Foundation, OU=Python Core Development, CN=null.python.org\x00example.org/emailAddress=python-dev@python.org ++ Subject Public Key Info: ++ Public Key Algorithm: rsaEncryption ++ Public-Key: (2048 bit) ++ Modulus: ++ 00:b5:ea:ed:c9:fb:46:7d:6f:3b:76:80:dd:3a:f3: ++ 03:94:0b:a7:a6:db:ec:1d:df:ff:23:74:08:9d:97: ++ 16:3f:a3:a4:7b:3e:1b:0e:96:59:25:03:a7:26:e2: ++ 88:a9:cf:79:cd:f7:04:56:b0:ab:79:32:6e:59:c1: ++ 32:30:54:eb:58:a8:cb:91:f0:42:a5:64:27:cb:d4: ++ 56:31:88:52:ad:cf:bd:7f:f0:06:64:1f:cc:27:b8: ++ a3:8b:8c:f3:d8:29:1f:25:0b:f5:46:06:1b:ca:02: ++ 45:ad:7b:76:0a:9c:bf:bb:b9:ae:0d:16:ab:60:75: ++ ae:06:3e:9c:7c:31:dc:92:2f:29:1a:e0:4b:0c:91: ++ 90:6c:e9:37:c5:90:d7:2a:d7:97:15:a3:80:8f:5d: ++ 7b:49:8f:54:30:d4:97:2c:1c:5b:37:b5:ab:69:30: ++ 68:43:d3:33:78:4b:02:60:f5:3c:44:80:a1:8f:e7: ++ f0:0f:d1:5e:87:9e:46:cf:62:fc:f9:bf:0c:65:12: ++ f1:93:c8:35:79:3f:c8:ec:ec:47:f5:ef:be:44:d5: ++ ae:82:1e:2d:9a:9f:98:5a:67:65:e1:74:70:7c:cb: ++ d3:c2:ce:0e:45:49:27:dc:e3:2d:d4:fb:48:0e:2f: ++ 9e:77:b8:14:46:c0:c4:36:ca:02:ae:6a:91:8c:da: ++ 2f:85 ++ Exponent: 65537 (0x10001) ++ X509v3 extensions: ++ X509v3 Basic Constraints: critical ++ CA:FALSE ++ X509v3 Subject Key Identifier: ++ 88:5A:55:C0:52:FF:61:CD:52:A3:35:0F:EA:5A:9C:24:38:22:F7:5C ++ X509v3 Key Usage: ++ Digital Signature, Non Repudiation, Key Encipherment ++ X509v3 Subject Alternative Name: ++ ************************************************************* ++ WARNING: The values for DNS, email and URI are WRONG. OpenSSL ++ doesn't print the text after a NULL byte. ++ ************************************************************* ++ DNS:altnull.python.org, email:null@python.org, URI:http://null.python.org, IP Address:192.0.2.1, IP Address:2001:DB8:0:0:0:0:0:1 ++ Signature Algorithm: sha1WithRSAEncryption ++ ac:4f:45:ef:7d:49:a8:21:70:8e:88:59:3e:d4:36:42:70:f5: ++ a3:bd:8b:d7:a8:d0:58:f6:31:4a:b1:a4:a6:dd:6f:d9:e8:44: ++ 3c:b6:0a:71:d6:7f:b1:08:61:9d:60:ce:75:cf:77:0c:d2:37: ++ 86:02:8d:5e:5d:f9:0f:71:b4:16:a8:c1:3d:23:1c:f1:11:b3: ++ 56:6e:ca:d0:8d:34:94:e6:87:2a:99:f2:ae:ae:cc:c2:e8:86: ++ de:08:a8:7f:c5:05:fa:6f:81:a7:82:e6:d0:53:9d:34:f4:ac: ++ 3e:40:fe:89:57:7a:29:a4:91:7e:0b:c6:51:31:e5:10:2f:a4: ++ 60:76:cd:95:51:1a:be:8b:a1:b0:fd:ad:52:bd:d7:1b:87:60: ++ d2:31:c7:17:c4:18:4f:2d:08:25:a3:a7:4f:b7:92:ca:e2:f5: ++ 25:f1:54:75:81:9d:b3:3d:61:a2:f7:da:ed:e1:c6:6f:2c:60: ++ 1f:d8:6f:c5:92:05:ab:c9:09:62:49:a9:14:ad:55:11:cc:d6: ++ 4a:19:94:99:97:37:1d:81:5f:8b:cf:a3:a8:96:44:51:08:3d: ++ 0b:05:65:12:eb:b6:70:80:88:48:72:4f:c6:c2:da:cf:cd:8e: ++ 5b:ba:97:2f:60:b4:96:56:49:5e:3a:43:76:63:04:be:2a:f6: ++ c1:ca:a9:94 ++-----BEGIN CERTIFICATE----- ++MIIE2DCCA8CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBxTELMAkGA1UEBhMCVVMx ++DzANBgNVBAgMBk9yZWdvbjESMBAGA1UEBwwJQmVhdmVydG9uMSMwIQYDVQQKDBpQ ++eXRob24gU29mdHdhcmUgRm91bmRhdGlvbjEgMB4GA1UECwwXUHl0aG9uIENvcmUg ++RGV2ZWxvcG1lbnQxJDAiBgNVBAMMG251bGwucHl0aG9uLm9yZwBleGFtcGxlLm9y ++ZzEkMCIGCSqGSIb3DQEJARYVcHl0aG9uLWRldkBweXRob24ub3JnMB4XDTEzMDgw ++NzEzMTE1MloXDTEzMDgwNzEzMTI1MlowgcUxCzAJBgNVBAYTAlVTMQ8wDQYDVQQI ++DAZPcmVnb24xEjAQBgNVBAcMCUJlYXZlcnRvbjEjMCEGA1UECgwaUHl0aG9uIFNv ++ZnR3YXJlIEZvdW5kYXRpb24xIDAeBgNVBAsMF1B5dGhvbiBDb3JlIERldmVsb3Bt ++ZW50MSQwIgYDVQQDDBtudWxsLnB5dGhvbi5vcmcAZXhhbXBsZS5vcmcxJDAiBgkq ++hkiG9w0BCQEWFXB5dGhvbi1kZXZAcHl0aG9uLm9yZzCCASIwDQYJKoZIhvcNAQEB ++BQADggEPADCCAQoCggEBALXq7cn7Rn1vO3aA3TrzA5QLp6bb7B3f/yN0CJ2XFj+j ++pHs+Gw6WWSUDpybiiKnPec33BFawq3kyblnBMjBU61ioy5HwQqVkJ8vUVjGIUq3P ++vX/wBmQfzCe4o4uM89gpHyUL9UYGG8oCRa17dgqcv7u5rg0Wq2B1rgY+nHwx3JIv ++KRrgSwyRkGzpN8WQ1yrXlxWjgI9de0mPVDDUlywcWze1q2kwaEPTM3hLAmD1PESA ++oY/n8A/RXoeeRs9i/Pm/DGUS8ZPINXk/yOzsR/XvvkTVroIeLZqfmFpnZeF0cHzL ++08LODkVJJ9zjLdT7SA4vnne4FEbAxDbKAq5qkYzaL4UCAwEAAaOB0DCBzTAMBgNV ++HRMBAf8EAjAAMB0GA1UdDgQWBBSIWlXAUv9hzVKjNQ/qWpwkOCL3XDALBgNVHQ8E ++BAMCBeAwgZAGA1UdEQSBiDCBhYIeYWx0bnVsbC5weXRob24ub3JnAGV4YW1wbGUu ++Y29tgSBudWxsQHB5dGhvbi5vcmcAdXNlckBleGFtcGxlLm9yZ4YpaHR0cDovL251 ++bGwucHl0aG9uLm9yZwBodHRwOi8vZXhhbXBsZS5vcmeHBMAAAgGHECABDbgAAAAA ++AAAAAAAAAAEwDQYJKoZIhvcNAQEFBQADggEBAKxPRe99SaghcI6IWT7UNkJw9aO9 ++i9eo0Fj2MUqxpKbdb9noRDy2CnHWf7EIYZ1gznXPdwzSN4YCjV5d+Q9xtBaowT0j ++HPERs1ZuytCNNJTmhyqZ8q6uzMLoht4IqH/FBfpvgaeC5tBTnTT0rD5A/olXeimk ++kX4LxlEx5RAvpGB2zZVRGr6LobD9rVK91xuHYNIxxxfEGE8tCCWjp0+3ksri9SXx ++VHWBnbM9YaL32u3hxm8sYB/Yb8WSBavJCWJJqRStVRHM1koZlJmXNx2BX4vPo6iW ++RFEIPQsFZRLrtnCAiEhyT8bC2s/Njlu6ly9gtJZWSV46Q3ZjBL4q9sHKqZQ= ++-----END CERTIFICATE----- +diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py +--- a/Lib/test/test_ssl.py ++++ b/Lib/test/test_ssl.py +@@ -25,6 +25,7 @@ ssl = test_support.import_module("ssl") + HOST = test_support.HOST + CERTFILE = None + SVN_PYTHON_ORG_ROOT_CERT = None ++NULLBYTECERT = None + + def handle_error(prefix): + exc_format = ' '.join(traceback.format_exception(*sys.exc_info())) +@@ -123,6 +124,27 @@ class BasicSocketTests(unittest.TestCase + ('DNS', 'projects.forum.nokia.com')) + ) + ++ def test_parse_cert_CVE_2013_4238(self): ++ p = ssl._ssl._test_decode_cert(NULLBYTECERT) ++ if test_support.verbose: ++ sys.stdout.write("\n" + pprint.pformat(p) + "\n") ++ subject = ((('countryName', 'US'),), ++ (('stateOrProvinceName', 'Oregon'),), ++ (('localityName', 'Beaverton'),), ++ (('organizationName', 'Python Software Foundation'),), ++ (('organizationalUnitName', 'Python Core Development'),), ++ (('commonName', 'null.python.org\x00example.org'),), ++ (('emailAddress', 'python-dev@python.org'),)) ++ self.assertEqual(p['subject'], subject) ++ self.assertEqual(p['issuer'], subject) ++ self.assertEqual(p['subjectAltName'], ++ (('DNS', 'altnull.python.org\x00example.com'), ++ ('email', 'null@python.org\x00user@example.org'), ++ ('URI', 'http://null.python.org\x00http://example.org'), ++ ('IP Address', '192.0.2.1'), ++ ('IP Address', '2001:DB8:0:0:0:0:0:1\n')) ++ ) ++ + def test_DER_to_PEM(self): + with open(SVN_PYTHON_ORG_ROOT_CERT, 'r') as f: + pem = f.read() +@@ -1360,7 +1382,7 @@ else: + + + def test_main(verbose=False): +- global CERTFILE, SVN_PYTHON_ORG_ROOT_CERT, NOKIACERT ++ global CERTFILE, SVN_PYTHON_ORG_ROOT_CERT, NOKIACERT, NULLBYTECERT + CERTFILE = os.path.join(os.path.dirname(__file__) or os.curdir, + "keycert.pem") + SVN_PYTHON_ORG_ROOT_CERT = os.path.join( +@@ -1368,10 +1390,13 @@ def test_main(verbose=False): + "https_svn_python_org_root.pem") + NOKIACERT = os.path.join(os.path.dirname(__file__) or os.curdir, + "nokia.pem") ++ NULLBYTECERT = os.path.join(os.path.dirname(__file__) or os.curdir, ++ "nullbytecert.pem") + + if (not os.path.exists(CERTFILE) or + not os.path.exists(SVN_PYTHON_ORG_ROOT_CERT) or +- not os.path.exists(NOKIACERT)): ++ not os.path.exists(NOKIACERT) or ++ not os.path.exists(NULLBYTECERT)): + raise test_support.TestFailed("Can't read certificate files!") + + tests = [BasicTests, BasicSocketTests] +diff --git a/Modules/_ssl.c b/Modules/_ssl.c +--- a/Modules/_ssl.c ++++ b/Modules/_ssl.c +@@ -738,13 +738,16 @@ static PyObject * + ext->value->length)); + + for(j = 0; j < sk_GENERAL_NAME_num(names); j++) { +- + /* get a rendering of each name in the set of names */ ++ int gntype; ++ ASN1_STRING *as = NULL; + + name = sk_GENERAL_NAME_value(names, j); +- if (name->type == GEN_DIRNAME) { +- +- /* we special-case DirName as a tuple of tuples of attributes */ ++ gntype = name-> type; ++ switch (gntype) { ++ case GEN_DIRNAME: ++ /* we special-case DirName as a tuple of ++ tuples of attributes */ + + t = PyTuple_New(2); + if (t == NULL) { +@@ -764,11 +767,61 @@ static PyObject * + goto fail; + } + PyTuple_SET_ITEM(t, 1, v); ++ break; + +- } else { ++ case GEN_EMAIL: ++ case GEN_DNS: ++ case GEN_URI: ++ /* GENERAL_NAME_print() doesn't handle NULL bytes in ASN1_string ++ correctly, CVE-2013-4238 */ ++ t = PyTuple_New(2); ++ if (t == NULL) ++ goto fail; ++ switch (gntype) { ++ case GEN_EMAIL: ++ v = PyString_FromString("email"); ++ as = name->d.rfc822Name; ++ break; ++ case GEN_DNS: ++ v = PyString_FromString("DNS"); ++ as = name->d.dNSName; ++ break; ++ case GEN_URI: ++ v = PyString_FromString("URI"); ++ as = name->d.uniformResourceIdentifier; ++ break; ++ } ++ if (v == NULL) { ++ Py_DECREF(t); ++ goto fail; ++ } ++ PyTuple_SET_ITEM(t, 0, v); ++ v = PyString_FromStringAndSize((char *)ASN1_STRING_data(as), ++ ASN1_STRING_length(as)); ++ if (v == NULL) { ++ Py_DECREF(t); ++ goto fail; ++ } ++ PyTuple_SET_ITEM(t, 1, v); ++ break; + ++ default: + /* for everything else, we use the OpenSSL print form */ +- ++ switch (gntype) { ++ /* check for new general name type */ ++ case GEN_OTHERNAME: ++ case GEN_X400: ++ case GEN_EDIPARTY: ++ case GEN_IPADD: ++ case GEN_RID: ++ break; ++ default: ++ if (PyErr_Warn(PyExc_RuntimeWarning, ++ "Unknown general name type") == -1) { ++ goto fail; ++ } ++ break; ++ } + (void) BIO_reset(biobuf); + GENERAL_NAME_print(biobuf, name); + len = BIO_gets(biobuf, buf, sizeof(buf)-1); +@@ -794,6 +847,7 @@ static PyObject * + goto fail; + } + PyTuple_SET_ITEM(t, 1, v); ++ break; + } + + /* and add that rendering to the list */ + |