[Python-checkins] r75737 - in python/branches/py3k: Lib/test/test_complex.py Misc/NEWS Objects/complexobject.c
mark.dickinson
python-checkins at python.org
Mon Oct 26 22:51:18 CET 2009
Author: mark.dickinson
Date: Mon Oct 26 22:51:18 2009
New Revision: 75737
Log:
Remove length limitation on string arguments to complex()
Modified:
python/branches/py3k/Lib/test/test_complex.py
python/branches/py3k/Misc/NEWS
python/branches/py3k/Objects/complexobject.c
Modified: python/branches/py3k/Lib/test/test_complex.py
==============================================================================
--- python/branches/py3k/Lib/test/test_complex.py (original)
+++ python/branches/py3k/Lib/test/test_complex.py Mon Oct 26 22:51:18 2009
@@ -284,7 +284,6 @@
self.assertRaises(ValueError, complex, "1+2j)")
self.assertRaises(ValueError, complex, "1+(2j)")
self.assertRaises(ValueError, complex, "(1+2j)123")
- self.assertRaises(ValueError, complex, "1"*500)
self.assertRaises(ValueError, complex, "x")
self.assertRaises(ValueError, complex, "1j+2")
self.assertRaises(ValueError, complex, "1e1ej")
@@ -295,6 +294,9 @@
self.assertRaises(ValueError, complex, "1.11.1j")
self.assertRaises(ValueError, complex, "1e1.1j")
+ # check that complex accepts long unicode strings
+ self.assertEqual(type(complex("1"*500)), complex)
+
class EvilExc(Exception):
pass
Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS (original)
+++ python/branches/py3k/Misc/NEWS Mon Oct 26 22:51:18 2009
@@ -12,6 +12,8 @@
Core and Builtins
-----------------
+- Remove length limitation when constructing a complex number from a string.
+
- Issue #1087418: Boost performance of bitwise operations for longs.
- Support for AtheOS has been completely removed from the code base. It was
Modified: python/branches/py3k/Objects/complexobject.c
==============================================================================
--- python/branches/py3k/Objects/complexobject.c (original)
+++ python/branches/py3k/Objects/complexobject.c Mon Oct 26 22:51:18 2009
@@ -740,20 +740,20 @@
char *end;
double x=0.0, y=0.0, z;
int got_bracket=0;
- char s_buffer[256];
+ char *s_buffer = NULL;
Py_ssize_t len;
if (PyUnicode_Check(v)) {
- if (PyUnicode_GET_SIZE(v) >= (Py_ssize_t)sizeof(s_buffer)) {
- PyErr_SetString(PyExc_ValueError,
- "complex() literal too large to convert");
- return NULL;
- }
+ s_buffer = (char *)PyMem_MALLOC(PyUnicode_GET_SIZE(v) + 1);
+ if (s_buffer == NULL)
+ return PyErr_NoMemory();
if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v),
PyUnicode_GET_SIZE(v),
s_buffer,
- NULL))
+ NULL)) {
+ PyMem_FREE(s_buffer);
return NULL;
+ }
s = s_buffer;
len = strlen(s);
}
@@ -870,9 +870,13 @@
if (s-start != len)
goto parse_error;
+ if (s_buffer)
+ PyMem_FREE(s_buffer);
return complex_subtype_from_doubles(type, x, y);
parse_error:
+ if (s_buffer)
+ PyMem_FREE(s_buffer);
PyErr_SetString(PyExc_ValueError,
"complex() arg is a malformed string");
return NULL;
More information about the Python-checkins
mailing list