[pypy-svn] r28226 - pypy/dist/pypy/objspace/std

ale at codespeak.net ale at codespeak.net
Sun Jun 4 11:41:33 CEST 2006


Author: ale
Date: Sun Jun  4 11:41:33 2006
New Revision: 28226

Modified:
   pypy/dist/pypy/objspace/std/complextype.py
Log:
Check for overflow. (inspired by the applevel implementation of complex, thank you Carl)

Modified: pypy/dist/pypy/objspace/std/complextype.py
==============================================================================
--- pypy/dist/pypy/objspace/std/complextype.py	(original)
+++ pypy/dist/pypy/objspace/std/complextype.py	Sun Jun  4 11:41:33 2006
@@ -11,6 +11,9 @@
 ERR_WRONG_SECOND = "complex() can't take second arg if first is a string"
 ERR_MALFORMED = "complex() arg is a malformed string"
 
+OVERFLOWED_FLOAT = 1e200
+OVERFLOWED_FLOAT *= OVERFLOWED_FLOAT
+
 complex_conjugate = StdObjSpaceMultiMethod('conjugate', 1)
 
 register_all(vars(),globals())
@@ -148,6 +151,10 @@
         except ParseStringError:
             raise OperationError(space.w_ValueError, space.wrap(ERR_MALFORMED))
         else:
+            #check for overflow            
+            if abs(realval) == OVERFLOWED_FLOAT or abs(imagval) == OVERFLOWED_FLOAT:
+                raise OperationError(space.w_ValueError,space.wrap(
+                                    "complex() literal too large to convert"))
             if space.is_w(w_complextype, space.w_complex):
                 # common case
                 w_obj = W_ComplexObject(realval, imagval)



More information about the Pypy-commit mailing list