On Wed, Nov 27, 2002 at 08:04:45PM -0800, Konstantin 'Kastus' Shchuka wrote:
> A rather weird problem:
> 
> It's mon-0.99.2 on SuSE 8.1, perl 5.8.0 (compiled with gcc 3.2
> if it is relevant)
> 
> monshow segfaults when there is a failed watch with a long output
> (~40 lines, in my particular case foundry-chassis.monitor).
> 
>       kastus@bursa:~> /usr/sbin/monshow
>       Segmentation fault
> 
> If the output from failed watches is not long, monshow runs fine.

Further research showed that the problem is with Text::ParseWords.

This is the minimal test case which triggers the bug:


#!/usr/bin/perl
use Text::ParseWords;
$o = q{'} .  q{1} x 3527 . q{'}  ;
print "Source string: $o\n";
$l = length $o;
print "string is $l bytes long\n";
@words = parse_line('\s+', 0, $o);
$i = 0;
foreach (@words) {
     print "$i: <$_>\n";
     $i++;
}

Segfault occurs in the following regexp in Text::ParseWords :

            $line =~ m/^(["'])                 # a $quote
                        ((?:\\.|(?!\1)[^\\])*)    # and $quoted text
                        \1                     # followed by the same quote
                        ([\000-\377]*)         # and the rest
                       |                       # --OR--
                       ^((?:\\.|[^\\"'])*?)    # an $unquoted text
                      (\Z(?!\n)|(?-x:$delimiter)|(?!^)(?=["']))  
                                               # plus EOL, delimiter, or quote
                      ([\000-\377]*)           # the rest
                      /x;                      # extended layout

The same code works in perl 5.6.1 without any problems.


-- 
Konstantin 'Kastus' Shchuka
Unix System Administrator
ePocrates Inc.
tel 650.227.1786
fax 650.592.6995
_______________________________________________
mon mailing list
[EMAIL PROTECTED]
http://linux.kernel.org/mailman/listinfo/mon

Reply via email to