Bugs item #1120452, was opened at 2005-02-11 00:04 Message generated for change (Comment added) made by nascheme You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1120452&group_id=5470
Category: Regular Expressions Group: Python 2.4 >Status: Closed >Resolution: Duplicate Priority: 7 Submitted By: Viktor Ferenczi (complex) >Assigned to: Neil Schemenauer (nascheme) Summary: Python 2.4.0 crashes with a segfault, EXAMPLE ATTACHED Initial Comment: Running the attached example crashes python 2.4.0 on linux (segfault) and Windows. Python is compiled on Debian Linux 3.0r3 (Woody). On Windows XP, I used the MSI installer downloaded from python.org This may be a problem with the regular expression module, but I'm not sure. Please assign a new category if it appears as a regexp bug. This bug causes permanent crashes in my new WEB applications. Old apps not using regexp and PyMeld seem to run correctly. Thanks for 2.4.1. ---------------------------------------------------------------------- >Comment By: Neil Schemenauer (nascheme) Date: 2005-03-01 23:16 Message: Logged In: YES user_id=35752 Closed as a duplicate of #1072259. The fix has already been backported to release24-maint. ---------------------------------------------------------------------- Comment By: Amaury Forgeot d'Arc (amauryf) Date: 2005-03-01 11:59 Message: Logged In: YES user_id=389140 I can reliably reproduce the problem on w2k using 2.4.0, debug build under Purify. Here is the testcase (using the files in the attached example): >>> import re,PyMeld >>> s=file("player.html").read() >>> print re.search(PyMeld.openIDTagRE,s) Applying the patch for bug #1072259 (_sre.c 2.110) causes the bug to disappear, and Purify does not complain. I suggest to consider this as a duplicate for bug #1072259 ---------------------------------------------------------------------- Comment By: Kurt B. Kaiser (kbk) Date: 2005-02-24 03:24 Message: Logged In: YES user_id=149084 The IDLE subprocess does different things with memory because it's threaded, with one thread minding the sockets and the other executing user code. So I'd stay away from IDLE when working on this. (Also, the debug traces are excessively complex.) ---------------------------------------------------------------------- Comment By: Neil Schemenauer (nascheme) Date: 2005-02-24 00:32 Message: Logged In: YES user_id=35752 I can reproduce the crash on my machine if I revert the patch for bug #1072259 (_sre.c 2.110). Here's what gdb says: 0x0810342a in sre_match (state=0xbfffca80, pattern=0x81bfbf2) at ../Modules/_sre.c:854 854 state->mark[j++] = NULL; (gdb) p j $7 = -1209149847 (gdb) p &(state->mark) $8 = (void *(*)[200]) 0xbfffcaa8 (gdb) p &j $9 = (int *) 0xbfffc9c0 Either the bug has been fixed or _sre has been changed enough that the test no longer triggers a crash. ---------------------------------------------------------------------- Comment By: Jim Jewett (jimjjewett) Date: 2005-02-22 23:58 Message: Logged In: YES user_id=764593 It probably is a memory scribble bug, though it might not be in re. For instance, the __getattr__ and __setattr__ try to do some shortcuts saving position, and they may cause the out- of-bounds. The crashes are very dependent on order. I wasn't kidding when I said it ran fine and printed None if run as a whole, but crashed when the same lines were input one by one. (Which gave idle a chance to do different things with memory in between, and didn't define a function object.) Also note that the second attribute access (even to a previously OK attribute) could cause a crash, unless it had had a chance to clear things up first -- but then it raised a MemoryError, when I almost certainly wasn't yet out of RAM. ---------------------------------------------------------------------- Comment By: Viktor Ferenczi (complex) Date: 2005-02-22 15:19 Message: Logged In: YES user_id=142612 Some additional information and summary: My machine is a 3.0Hz Intel P4 with 1Gbyte memory, without overclocking. I use 2 antivirus (1 active) and 3 antispyware apps + firewall. The memory has been tested for 6 hours with Knoppix's memtest without any error, so my machine can be considered to be stable. The attached script can crash python 2.4.0 at least for me and jumjjewett. Do not run the script from IDLE, since it can hide the segfault. I usually run my scripts from SciTE (see: www.scintilla.org ). The bug can be reproduced on stock Python 2.4.0 (MSI installer). PyMeld is pure python (uses only the standard library), no C extension modules used. I did not test this bug with the latest CVS versions of Python 2.4. Is produces segfault under Linux. I'll try to narrow down this bug for specific regex patterns. ---------------------------------------------------------------------- Comment By: Michael Hudson (mwh) Date: 2005-02-22 14:51 Message: Logged In: YES user_id=6656 Well, I still can't make it crash. Can one of you provide a crashing driver script? Better still would be finding which regexp and which input is the problem. (Unless it's a memory-scribble random crasher type bug...) ---------------------------------------------------------------------- Comment By: Viktor Ferenczi (complex) Date: 2005-02-22 13:07 Message: Logged In: YES user_id=142612 This bug is a segfault, a real crash using only the stock 2.4.0. It has been reproduced correctly by jimjjewett. It seems to be a regexp related bug. I've changed the category to pass this bug to a regexp expert. Thanks for any help. - Complex ---------------------------------------------------------------------- Comment By: Kurt B. Kaiser (kbk) Date: 2005-02-20 01:56 Message: Logged In: YES user_id=149084 The restart in IDLE will occur if the subprocess is terminated or segfaults. ---------------------------------------------------------------------- Comment By: Jim Jewett (jimjjewett) Date: 2005-02-11 19:55 Message: Logged In: YES user_id=764593 __gettattr__ alone can provoke the crash, if used several times, and on sub-melds. I can print both StreamURL1 and StreamURL2. If I ask it for p.StreamURL2.src and p.StreamURL1.value, it prints whichever one I ask for first, and then crashes on the second. I did get it to print both (not assign, just __getattr__) by first getting several other attributes from p.StreamURL1, including some that didn't exist, so that there was a raise AttributeError in between. Doing this a half dozen times, I provoked a MemoryError. """ >>> p.StreamURL1.value 'mss://stream.url' >>> p.StreamURL2.src Traceback (most recent call last): File "<pyshell#68>", line 1, in -toplevel- p.StreamURL2.src File "C:\Python24\Lib\site-packages\segfault240\PyMeld. py", line 475, in __getattr__ start = self._findElementFromID(name) File "C:\Python24\Lib\site-packages\segfault240\PyMeld. py", line 425, in _findElementFromID match = _findIDMatch(nodeID, subset) File "C:\Python24\Lib\site-packages\segfault240\PyMeld. py", line 282, in _findIDMatch match = re.search(thisRE, text) File "C:\Python24\lib\sre.py", line 134, in search return _compile(pattern, flags).search(string) MemoryError >>> """ ---------------------------------------------------------------------- Comment By: Jim Jewett (jimjjewett) Date: 2005-02-11 19:36 Message: Logged In: YES user_id=764593 Partially reproduced on Windows XP. (Using the stock 2.4. 0 msi) Just loading it in IDLE and hitting F5 (run), it prints None, as though it had succeeded perfectly. Typing in the commands from index.py by hand, I can get it to give me the "encountered an error; Tell Microsoft?" box, but IDLE only restarts instead of actually crashing. There seems to a problem between the __getattr__ and the __setattr__ in PyMeld. """ >>> p=Meld(open('player.html','rb').read()) >>> p.StreamURL1.value 'mss://stream.url' >>> p.StreamURL2 <PyMeld.Meld instance at 0x00B455F8> >>> p.StreamURL2.src 'mms://stream.url' >>> v=Video() >>> v.stream 's' >>> p.StreamURL1.value=v.stream >>> p.StreamURL1.value >>> ================================ RESTART ================================ >>> """ ---------------------------------------------------------------------- Comment By: Michael Hudson (mwh) Date: 2005-02-11 14:57 Message: Logged In: YES user_id=6656 What do you do to make it crash? "python index.py"? It doesn't fail for me with CVS HEAD. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1120452&group_id=5470 _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com