[Python-Dev] [Fwd: segfault in sre on 64-bit plats]

Mark Favas m.favas@per.dem.csiro.au
Thu, 17 Aug 2000 09:17:42 +0800


This is a multi-part message in MIME format.
--------------53A0211FF1B8BFA142994B9A
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

 
--------------53A0211FF1B8BFA142994B9A
Content-Type: message/rfc822
Content-Disposition: inline

Message-ID: <399B3CAA.C8815E61@per.dem.csiro.au>
Date: Thu, 17 Aug 2000 09:15:22 +0800
From: Mark Favas <m.favas@per.dem.csiro.au>
Organization: CSIRO Exploration & Mining
X-Mailer: Mozilla 4.73 [en] (X11; U; OSF1 V4.0 alpha)
X-Accept-Language: en
MIME-Version: 1.0
To: Trent Mick <trentm@ActiveState.com>
Subject: Re: segfault in sre on 64-bit plats
References: <20000815104723.A27306@ActiveState.com>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Trent Mick wrote:
> 
> Fredrik,
> 
> The sre module currently segfaults on one of the tests suite tests on both
> Win64 and 64-bit linux:
> 
>     [trentm@nickel src]$ ./python -c "import sre; sre.match('(x)*', 50000*'x')" > srefail.out
>     Segmentation fault (core dumped)
> 
> I know that I can't expect you to debug this completely, as you don't have to
> hardware, but I was hoping you might be able to shed some light on the
> subject for me.
> 
> This test on Win32 and Linux32 hits the recursion limit check of 10000 in
> SRE_MATCH(). However, on Linux64 the segfault occurs at a recursion depth of
> 7500. I don't want to just willy-nilly drop the recursion limit down to make
> the problem go away.
> 
> Do you have any idea why the segfault may be occuring on 64-bit platforms?
> 
> Mark (Favas), have you been having any problems with sre on your 64-bit plats?
> 

Sorry for the delay - yes, I had these segfaults due to exceeding the
stack size on Tru64 Unix (which, by default, is 2048 kbytes) before
Fredrick introduced the recusrion limit of 10000 in _sre.c. You'd expect
a 64-bit OS to use a bit more bytes of the stack when handling recursive
calls, but your 7500 down from 10000 sounds a bit much - unless the
stack size limit you're using on Linux64 is smaller than that for
Linux32 - what are they? I certainly agree that it'd be better to solve
this in a way other than selecting a sufficiently low recursion limit (I
won't mention stackless here... <grin>.) - getrlimit(2), getrusage(2),
or other???
-- 
Mark

--------------53A0211FF1B8BFA142994B9A--