Accéder au contenu.
Menu Sympa

fr - [sympa-fr] wwsympa.fcgi : Erreur 500 sur expression de recherche incorrecte

Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa

Archives de la liste

Chronologique Discussions  
  • From: Sylvain Amrani <adresse@cachée>
  • To: adresse@cachée
  • Subject: [sympa-fr] wwsympa.fcgi : Erreur 500 sur expression de recherche incorrecte
  • Date: Tue, 14 Jun 2005 15:11:24 +0200

Bonjour,

Sur l'interface web, les expressions de recherche pour le do_search_list() sont interprétées, pour partie seulement, comme des regexp.

Cependant l'application de la regexp n'est pas dans un eval{}; ce qui casse le script en cas d'expression non valide (par exemple avec un crochet ouvrant uniquement). C'est extrêmement pénalisant, car apache recharge le cgi, et donc toutes les listes.

J'ai préféré pour ma part placer la regexp dans un eval{} et échapper les [] et () (j'ai en effet des subjects de listes qui contiennent ces caractères, et aucune chance d'enseigner les expressions régulières aux utilisateurs !). Par ailleurs, il m'a semblé que les paramètres étaient filtrés et que l'* ne parviendrait jamais à la fonction.

Sylvain.

[je ne peux pas vous donner de .diff, car mon fichier est trop différent] :

## Regexp
$param->{'filter'} = $in{'filter'};
$param->{'regexp'} = $param->{'filter'};
$param->{'regexp'} =~ s/\\/\\\\/g;
$param->{'regexp'} =~ s/\./\\\./g;
$param->{'regexp'} =~ s/\*/\.\*/g;
$param->{'regexp'} =~ s/\+/\\\+/g;
$param->{'regexp'} =~ s/\?/\\\?/g;
$param->{'regexp'} =~ s/\[/\\\[/g;
$param->{'regexp'} =~ s/\]/\\\]/g;
$param->{'regexp'} =~ s/\(/\\\)/g;
$param->{'regexp'} =~ s/\)/\\\)/g;

## Members list
my $record = 0;
foreach my $l ( &List::get_lists($robot) ) {
my $is_admin;
my $list = new List ($l, $robot);

## Search filter
my $regtest = eval { (($list->{'name'} !~ /$param->{'regexp'}/i)
&& ($list->{'admin'}{'subject'} !~ /$param->{'regexp'}/i)) };
unless (defined($regtest)) {
&error_message('syntax_errors', {'params' => 'filter'});
&wwslog('err','do_search_list: syntax error');
return undef;
}
next if $regtest;

#next if (($list->{'name'} !~ /$param->{'regexp'}/i)
# && ($list->{'admin'}{'subject'} !~ /$param->{'regexp'}/i));





Archives gérées par MHonArc 2.6.19+.

Haut de le page