Hi guys,

We are having a stackoverflow error very similar to the one mentioned by
Ulla Schat on Wed, 11 Feb 2004 01:26:07 -0800.

Using Ullas test program verbatim (without modifications to the regex or
input) we can replicate the StackOverFlow with 2.0.8 using the following
command line:

java -Xss350k -cp .:./jakarta-oro-2.0.8.jar TestRegexp 2> stackoverflow.txt

Running java version "1.5.0_01", on Linux (2.6.6/Fedora).

As you can see, __match() is being called recursively, and the stack
grows to enormous sizes, easily chewing up the 350k allocated stack
space, for such a small regex pattern...

The "easy" solution would be to increase the stack size, but this isn't
really possible for high volume, massive thread counts (production
environments), since it would mean less available threads, due to memory
usage.

The same problem has been encountered by:

http://mail-archives.eu.apache.org/mod_mbox/jakarta-oro-dev/200211.mbox/[EMAIL 
PROTECTED]

Running the exact same thing through perl produces no errors, and is
very fast... [see attached perl]

Any ideas on how to implement this without growing the stack ?

Damien

---------------

#!/usr/bin/perl
$input = "{1:
this is some more text - and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more
this is some more text and some more and some more and even more at the end
-}";
#orig $pattern = "{(\\d+):(([^}](?!-}))*)";
#dan $pattern = "{(\\d+):([^}]+)(?!-)(?!})";
$pattern = "{(\\d+):(([^}](?!-}))*)";
if ($input =~ m/$pattern/s)
{
        print "OK!\n---Match 1---\n$1\n---Match 2---\n$2\n---Match
3---\n$3\n";
} else {
        print "NO MATCH\n";
}


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to