• Guido van Rossum's avatar
    Subject: Buglet in PyLong_AsLong · f7531812
    Guido van Rossum yazdı
    From: "Tim Peters" <tim_one@email.msn.com>
    To: "Guido van Rossum" <guido@CNRI.Reston.VA.US>
    Date: Sat, 23 May 1998 21:45:53 -0400
    
    Guido, the overflow checking in PyLong_AsLong is off a little:
    
    1) If the C in use sign-extends right shifts on signed longs, there's a
    spurious overflow error when converting the most-negative int:
    
    Python 1.5.1 (#0, Apr 13 1998, 20:22:04) [MSC 32 bit (Intel)] on win32
    Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
    >>> x = -1L << 31
    >>> x
    -2147483648L
    >>> int(x)
    Traceback (innermost last):
      File "<stdin>", line 1, in ?
    OverflowError: long int too long to convert
    >
    > 2) If C does not sign-extend, some genuine overflows won't be caught.
    >
    > The attached should repair both, and, because I installed a new disk and a C
    > compiler today, it's even been compiled this time <wink>.
    >
    > Python 1.5.1 (#0, May 23 1998, 20:24:58) [MSC 32 bit (Intel)] on win32
    > Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
    > >>> x = -1L << 31
    > >>> x
    > -2147483648L
    > >>> int(x)
    > -2147483648
    > >>> int(-x)
    > Traceback (innermost last):
    >   File "<stdin>", line 1, in ?
    > OverflowError: long int too long to convert
    > >>> int(-x-1)
    > 2147483647
    > >>> int(x-1)
    > Traceback (innermost last):
    >   File "<stdin>", line 1, in ?
    > OverflowError: long int too long to convert
    
    end-casing-ly y'rs  - tim
    f7531812
longobject.c 31.9 KB