Patch #1673759: add a missing overflow check when formatting floats

with %G.
This commit is contained in:
Georg Brandl 2007-07-12 08:38:00 +00:00
parent bc5fbd9f8c
commit 7c3b50db66
4 changed files with 24 additions and 5 deletions

View file

@ -9,6 +9,7 @@ maxsize = MAX_Py_ssize_t
# test on unicode strings as well
overflowok = 1
overflowrequired = 0
def testformat(formatstr, args, output=None):
if verbose:
@ -25,11 +26,16 @@ def testformat(formatstr, args, output=None):
if verbose:
print 'overflow (this is fine)'
else:
if output and result != output:
if overflowrequired:
if verbose:
print 'no'
print "%s %% %s == %s != %s" %\
(repr(formatstr), repr(args), repr(result), repr(output))
print "overflow expected on %s %% %s" % \
(repr(formatstr), repr(args))
elif output and result != output:
if verbose:
print 'no'
print "%s %% %s == %s != %s" % \
(repr(formatstr), repr(args), repr(result), repr(output))
else:
if verbose:
print 'yes'
@ -57,6 +63,14 @@ testboth("%#.*g", (110, -1.e+100/3.))
# test some ridiculously large precision, expect overflow
testboth('%12.*f', (123456, 1.0))
# check for internal overflow validation on length of precision
overflowrequired = 1
testboth("%#.*g", (110, -1.e+100/3.))
testboth("%#.*G", (110, -1.e+100/3.))
testboth("%#.*f", (110, -1.e+100/3.))
testboth("%#.*F", (110, -1.e+100/3.))
overflowrequired = 0
# Formatting of long integers. Overflow is not ok
overflowok = 0
testboth("%x", 10L, "a")