A fix for OverflowError in 64bits platforms

Terry Reedy tjreedy at udel.edu
Thu Jul 3 22:11:21 CEST 2008


Manuel Vazquez Acosta wrote:
> Hi all,
> 
> I'm debugging a Plone site in an AMD64 laptop. When I first tried to run
> Zope, I got this exception:

In general, versions numbers for both Python and the app are helpful.

> OverflowError: signed integer is greater than maximum
> 
> In the archives I encounter no solutions.

Archives: Python? Zope? Plone?

> This is what I could find, so I share with you all:

I hope you have/will report this to the appropriate place.

> It seems that on 64bit platforms, sys.maxint is much greater than list's
> insertion maximum index. I'm not sure if this a bug in python or a

This strikes me as an app bug.  In any case, released versions of Python 
will not change.

> logical bound ---given the amount of RAM it would take to insert
> 9,223,372,036,854,775,807 items ;)--- Maybe a bug in the documentation,
> though
> 
> However, Archetypes.Schema.moveField method documents the use of maxint
> for inserting at the end of the Schema::
 > maxint can be used to move the field to the last position possible

This is a bit flakey. If they are going to use a surrogate for 
len(schemalist)-1, they might as well accept anything larger and shrink 
it to the proper value as slicing does.

In 2.5.2
 >>> a=[1,2,3]
 >>> a[1:1000000000000000000000]
[2, 3]

>     >>> from sys import maxint
>     >>> spos = schema.copy()
>     >>> spos.moveField('a', pos=maxint)
>     >>> spos.keys()
>     ['b', 'c', 'a']
> 
> I have seen this usage in some products. This raises and OverflowError
> on 64bit platforms.
> 
> The fix is simple in the code of the caller::
>    from sys import maxint
>    if maxint >> 33:  # Am I running on 64bits?
>        maxint = maxint >> 33
>    theschema.moveField(the_name, pos=maxint)
> 
> Now, the maxint variable holds an acceptable value.
> 
> I think the docstring should be appended with a "Note: On 64bits
> platform this raises an OverflowError blah blah..."

Better to fix it ;-)




More information about the Python-list mailing list