Fix CVE-2021-3177 for Python 2.7: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3177 Patch copied from Debian: https://salsa.debian.org/cpython-team/python2/-/blob/e54f3303884f1362f3311ec36f070b40603dd76e/debian/patches/CVE-2021-3177.diff bpo-42938: Replace snprintf with Python unicode formatting in ctypes param reprs. --- a/Lib/ctypes/test/test_parameters.py +++ b/Lib/ctypes/test/test_parameters.py @@ -206,6 +206,49 @@ class SimpleTypesTestCase(unittest.TestC with self.assertRaises(ZeroDivisionError): WorseStruct().__setstate__({}, b'foo') + def test_parameter_repr(self): + from ctypes import ( + c_bool, + c_char, + c_wchar, + c_byte, + c_ubyte, + c_short, + c_ushort, + c_int, + c_uint, + c_long, + c_ulong, + c_longlong, + c_ulonglong, + c_float, + c_double, + c_longdouble, + c_char_p, + c_wchar_p, + c_void_p, + ) + self.assertRegexpMatches(repr(c_bool.from_param(True)), r"^$") + self.assertEqual(repr(c_char.from_param('a')), "") + self.assertRegexpMatches(repr(c_wchar.from_param('a')), r"^$") + self.assertEqual(repr(c_byte.from_param(98)), "") + self.assertEqual(repr(c_ubyte.from_param(98)), "") + self.assertEqual(repr(c_short.from_param(511)), "") + self.assertEqual(repr(c_ushort.from_param(511)), "") + self.assertRegexpMatches(repr(c_int.from_param(20000)), r"^$") + self.assertRegexpMatches(repr(c_uint.from_param(20000)), r"^$") + self.assertRegexpMatches(repr(c_long.from_param(20000)), r"^$") + self.assertRegexpMatches(repr(c_ulong.from_param(20000)), r"^$") + self.assertRegexpMatches(repr(c_longlong.from_param(20000)), r"^$") + self.assertRegexpMatches(repr(c_ulonglong.from_param(20000)), r"^$") + self.assertEqual(repr(c_float.from_param(1.5)), "") + self.assertEqual(repr(c_double.from_param(1.5)), "") + self.assertEqual(repr(c_double.from_param(1e300)), "") + self.assertRegexpMatches(repr(c_longdouble.from_param(1.5)), r"^$") + self.assertRegexpMatches(repr(c_char_p.from_param(b'hihi')), "^$") + self.assertRegexpMatches(repr(c_wchar_p.from_param('hihi')), "^$") + self.assertRegexpMatches(repr(c_void_p.from_param(0x12)), r"^$") + ################################################################ if __name__ == '__main__': --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -460,50 +460,53 @@ PyCArg_dealloc(PyCArgObject *self) static PyObject * PyCArg_repr(PyCArgObject *self) { - char buffer[256]; switch(self->tag) { case 'b': case 'B': - sprintf(buffer, "", + return PySt-rw-r--r--gnu/packages/python-web.scm32
1 files changed, 32 insertions, 0 deletions
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 9464021d82..ac7ea63573 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -31,6 +31,7 @@
;;; Copyright © 2019 Brendan Tildesley <mail@brendan.scot>
;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
+;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -3494,3 +3495,34 @@ is part of the Weblate translation platform.")
(description "This package provides an extended library for interacting
with GitLab instances through their API.")
(license license:lgpl3+)))
+
+(define-public python-path-and-address
+ (package
+ (name "python-path-and-address")
+ (version "2.0.1")
+ (source
+ (origin
+ ;; The source distributed on PyPI doesn't include tests.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/joeyespo/path-and-address")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32