[Python-bugs-list] [ python-Bugs-415514 ] "%#x" % 0 caused assertion failure/abort
noreply@sourceforge.net
noreply@sourceforge.net
Wed, 11 Apr 2001 17:38:46 -0700
Bugs item #415514, was updated on 2001-04-11 13:38
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=415514&group_id=5470
Category: Python Interpreter Core
Group: None
>Status: Closed
Priority: 7
Submitted By: Fergal Mc Carthy (rahn_tamalin)
Assigned to: Tim Peters (tim_one)
>Summary: "%#x" % 0 caused assertion failure/abort
Initial Comment:
[I am unable to fix a similar problem report, even
searching for the assertion failure. Please forgive
me if I'm reporting a known problem.]
With python 2.0, I've found that if I tried to print a
value of 0 with a % format of "%#x" that this
generates the following aborts under both Unix (Tru64)
and Windows (98SE).
"%#o" doesn't have problems.
[python 2.0 built for Digital UNIX (DEC OSF) V4.0d]
Python 2.0 (#1, Apr 11 2001, 20:48:08) [C] on osf1V4
Type "copyright", "credits" or "license" for more
information.
>>> "%#x" % 0
Assertion failed: pbuf[1] == c, file stringobject.c,
line 2981
[python 2.0 built for Tru64 UNIX (DEC OSF) V5.0]
Python 2.0 (#1, Apr 11 2001, 20:35:33) [C] on osf1V5
Type "copyright", "credits" or "license" for more
information.
>>> "%#x" % 0
Assertion failed: pbuf[1] == c, file stringobject.c,
line 2981
[python 2.0 built for Tru64 UNIX (DEC OSF) V5.1]
Python 2.0 (#2, Apr 8 2001, 20:54:56) [C] on osf1V5
Type "copyright", "credits" or "license" for more
information.
>>> "%#x" % 0
Assertion failed: pbuf[1] == c, file stringobject.c,
line 2981
[Windows 98 SE Illegal Operation Exception Details]
PYTHON caused an invalid page fault in
module PYTHON20.DLL at 0167:1e15a784.
Registers:
EAX=ffffffff CS=0167 EIP=1e15a784 EFLGS=00010207
EBX=00000000 SS=016f ESP=0063fb98 EBP=00000078
ECX=3ffffefe DS=016f ESI=0063fffe FS=4b17
EDX=00790f87 ES=016f EDI=0079138b GS=0000
Bytes at CS:EIP:
f3 a5 8b c8 83 e1 03 f3 a4 8b 44 24 18 8b 74 24
Stack dump:
00761b6c 007747fc 00761b6c 00790ad0 00000000 0063fbfa
ffffffff 00000064 00790f87 00790f70 ffffffff 00790ae7
00000008 ffffffff ffffffff 00000000
----------------------------------------------------------------------
>Comment By: Tim Peters (tim_one)
Date: 2001-04-11 17:38
Message:
Logged In: YES
user_id=31435
Fixed and closed.
Lib/test/test_format.py; new revision: 1.10
Objects/stringobject.c; new revision: 2.101
Objects/unicodeobject.c; new revision: 2.81
>From the checkin msg:
"""
For short ints, Python defers to the platform C library to
figure out what %#x should do. The code asserted that the
platform C returned a string beginning with "0x". However,
that's not true when-- and only when --the *value* being
formatted is 0. Changed the code to live with C's
inconsistency here. In the meantime, the problem does not
arise if you format a long 0 (0L) instead. However, that's
because the code *we* wrote to do %#x conversions on longs
produces a leading "0x" regardless of value. That's
probably wrong too: we should drop leading "0x", for
consistency with C, when (& only when) formatting
0L. So I changed the long formatting code to do that too.
"""
----------------------------------------------------------------------
Comment By: Tim Peters (tim_one)
Date: 2001-04-11 15:21
Message:
Logged In: YES
user_id=31435
Assigned to me and boosted the priority. Dies with the
same assertion under a debug-build Windows Python. Since I
almost certainly added the assert(), I must have been
suspicious at one time <wink/sigh>.
----------------------------------------------------------------------
You can respond by visiting:
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=415514&group_id=5470