The line in $evalstr that causes the stack fault is:

if ($self->{conf}->{scores}->{q{WLS_URI_OPT_377}}) {

Which is on line 21720 (out of ~30800 lines).  From what I've gathered, each
rule in the .cf files results in 4 lines being strung together in $evalstr:

      if ($self->{conf}->{scores}->{q{<RULE_NAME>}}) {
        <RULE_NAME>_uri_test($self, @_); # call procedurally for speed
      }

It doesn't matter which rule is on line 21720 (as I've changed them around
to make sure it wasn't specifically WLS_URI_OPT_377, from
sa-blacklist.current.uri.cf),  It seems when you get to line 21720 w/ a 64MB
stack on FreeBSD 5.4 w/ perl 5.8.7 etc, etc. that you've ran out of stack
space.  This is part of the gdb bt from a perl5.8.7.core that I had:

#0  0x280a2144 in Perl_malloc (nbytes=25) at malloc.c:1411
#1  0x281075b5 in S_save_hek_flags (str=0x935b328 "WLS_URI_OPT_377", len=15,
hash=1020016264, flags=0) at hv.c:97
#2  0x2810aa51 in S_share_hek_flags (str=0x935b328 "WLS_URI_OPT_377",
len=15, hash=1020016264, flags=0) at hv.c:2114
#3  0x2810a940 in Perl_share_hek (str=0x935b328 "WLS_URI_OPT_377", len=15,
hash=1020016264) at hv.c:2074
#4  0x28129e29 in Perl_newSVpvn_share (src=0x935b328 "WLS_URI_OPT_377",
len=15, hash=1020016264) at sv.c:6876
#5  0x280def33 in Perl_peep (o=0x935f288) at op.c:6699
#6  0x280debcc in Perl_peep (o=0x935ef88) at op.c:6634
... (lots of calls to Perl_peep, o= different numbers each time.. I'm
assuming it's a recursive function)
#5432 0x280debcc in Perl_peep (o=0x8081108) at op.c:6634
#5433 0x280debcc in Perl_peep (o=0x8587a48) at op.c:6634
#5434 0x280debcc in Perl_peep (o=0x8062b08) at op.c:6634
#5435 0x280d10d5 in Perl_newPROG (o=0x8062b88) at op.c:1952
#5436 0x280cac39 in Perl_yyparse () at perly.y:140
#5437 0x28155eb7 in S_doeval (gimme=128, startop=0x0, outside=0x805829c,
seq=0) at pp_ctl.c:2892
#5438 0x281588ef in Perl_pp_entereval () at pp_ctl.c:3486
#5439 0x280f8ebe in Perl_runops_debug () at dump.c:1452
#5440 0x2809be1f in S_run_body (oldscope=1) at perl.c:2000
#5441 0x2809b8d5 in perl_run (my_perl=0x804e1f0) at perl.c:1919
#5442 0x08049188 in main ()

(5434 (first Perl_peep line) - 4 (line after last Perl_peep) * 4 = 21720

John Narron            | "Sacrifice, they always say
Network Administration |  Is a sign of nobility
CDS/CDSinet, LLC       |  But where does one draw the line
http://www.cdsinet.net |  In the face of injury?"
(660) 886 4045         |     - Queensryche  

> -----Original Message-----
> From: Loren Wilton [mailto:[EMAIL PROTECTED] 
> Sent: Tuesday, July 26, 2005 12:06 PM
> To: users@spamassassin.apache.org
> Subject: Re: SpamAssassin, FreeBSD, Perl 5.8.7, bus errors, oh my!
> 
> > I find out where in $evalstr that the Bus Error occurs.  
> Removing the 
> > offending line, and everything after results with a successful eval 
> > call.
> 
> Hum.  It might be mildly interesting to know what the line is 
> that causes the stack fault.  I assume this is generated 
> code, and possibly a slight change in what is being generated 
> could reduce or eliminate the recursion that I assume is 
> occuring.  I'd think that code should be reasonably simple but...
> 
>         Loren
> 
> 
> 


Reply via email to