From a2e92fcbf2121849fa5dc2f2232a0fdcb895ccf1 Mon Sep 17 00:00:00 2001 From: Anthony Baxter Date: Thu, 18 Apr 2002 02:19:46 +0000 Subject: [PATCH] backport tim_one's patch: SF bug 543840: complex(string) accepts strings with \0 complex_subtype_from_string(): this stopped parsing at the first 0 byte, as if that were the end of the input string. --- Lib/distutils/command/bdist_dumb.py | 1 + Lib/distutils/command/bdist_wininst.py | 1 + Lib/test/test_b1.py | 13 +++++++++++++ Objects/complexobject.c | 2 +- 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Lib/distutils/command/bdist_dumb.py b/Lib/distutils/command/bdist_dumb.py index 8dfc3271dfaf..13fe27c3aaa6 100644 --- a/Lib/distutils/command/bdist_dumb.py +++ b/Lib/distutils/command/bdist_dumb.py @@ -81,6 +81,7 @@ class bdist_dumb (Command): # And make an archive relative to the root of the # pseudo-installation tree. + install.warn_dir = 0 archive_basename = "%s.%s" % (self.distribution.get_fullname(), self.plat_name) self.make_archive(os.path.join(self.dist_dir, archive_basename), diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py index 7ef29f30b63b..58d3c9372593 100644 --- a/Lib/distutils/command/bdist_wininst.py +++ b/Lib/distutils/command/bdist_wininst.py @@ -98,6 +98,7 @@ class bdist_wininst (Command): value = value + '/Include/$dist_name' setattr(install, 'install_' + key, + install.warn_dir = 0 value) self.announce("installing to %s" % self.bdist_dir) diff --git a/Lib/test/test_b1.py b/Lib/test/test_b1.py index 275c6742b600..d7e09250df21 100644 --- a/Lib/test/test_b1.py +++ b/Lib/test/test_b1.py @@ -124,16 +124,29 @@ if complex(0j, 3.14) != 3.14j: raise TestFailed, 'complex(0j, 3.14)' if complex(0.0, 3.14) != 3.14j: raise TestFailed, 'complex(0.0, 3.14)' if complex("1") != 1+0j: raise TestFailed, 'complex("1")' if complex("1j") != 1j: raise TestFailed, 'complex("1j")' + try: complex("1", "1") except TypeError: pass else: raise TestFailed, 'complex("1", "1")' + try: complex(1, "1") except TypeError: pass else: raise TestFailed, 'complex(1, "1")' + if complex(" 3.14+J ") != 3.14+1j: raise TestFailed, 'complex(" 3.14+J )"' if have_unicode: if complex(unicode(" 3.14+J ")) != 3.14+1j: raise TestFailed, 'complex(u" 3.14+J )"' + +# SF bug 543840: complex(string) accepts strings with \0 +# Fixed in 2.3. +try: + complex('1+1j\0j') +except ValueError: + pass +else: + raise TestFailed("complex('1+1j\0j') should have raised ValueError") + class Z: def __complex__(self): return 3.14j z = Z() diff --git a/Objects/complexobject.c b/Objects/complexobject.c index 48a9afa2e7fa..8392f5d80d36 100644 --- a/Objects/complexobject.c +++ b/Objects/complexobject.c @@ -787,7 +787,7 @@ complex_subtype_from_string(PyTypeObject *type, PyObject *v) } /* end of switch */ - } while (*s!='\0' && !sw_error); + } while (s - start < len && !sw_error); if (sw_error) { PyErr_SetString(PyExc_ValueError, -- 2.47.3