Accéder au contenu.
Menu Sympa

fr - Bug stats sympa 2.x, 3.x

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

Archives de la liste

Chronologique Discussions  
  • From: Guy Brand <adresse@cachée>
  • To: adresse@cachée
  • Subject: Bug stats sympa 2.x, 3.x
  • Date: Fri, 22 Mar 2002 17:34:27 +0100

Bonjour,


Nous avons rencontré un blocage de l'une de nos listes gérées par
sympa (v3.3.3/Debian) en début de semaine. L'envoi de tout message
(modérateur ou abonné) à destination de cette liste aboutissait à :

Mar 21 11:10:24 sympa[28517]: No subscriber in list liste
Mar 21 11:10:24 sympa[28517]: Unable to send message to list liste
Mar 21 11:10:24 sympa[28517]: Moving bad file liste.1016705424.28538 to
bad/

La liste n'avait pourtant pas été dépeuplée.
Après vérification, l'erreur est liée au contenu du fichier stats de
cette liste :

%> cat /var/lib/sympa/expl/liste/stats
377 138431 2755338 -2146445630 777

L'entier utilisé pour stocker le nombre d'octets distribués par la
liste déborde (plate-forme i86). La ligne 4665 du package List.pm de
sympa provoque cette écriture :

if (<L> =~ /^(\d+)\s+(\d+)\s+(\d+)\s+(\d+)(\s+(\d+))?/) {

échoue et conduit aux valeurs par défaut [0 0 0 0 0], et le message
d'erreur ("No subscriber in list...") est lié à la dernière valeur
($total = 0).

La correction proposée est une modification de la fonction
_save_users_file (dans List.pm) :

printf L "%d %d %.0f %.0f %d\n", @{$stats}, $total;

au lieu de :

printf L "%d %d %d %d %d\n", @{$stats}, $total;

évitant l'integer overflow à l'écriture du fichier lorsque $stats[3] >
2^31 - 1.


Par ailleurs, l'absence d'un fichier de stats ou un fichier de stats
vide provoque aussi le blocage de la liste, puisque $total est
initialisée à 0 (lignes 4670 et 4675 de List.pm). Je pense qu'il est
rare de démarrer une liste (fut-ce de test du robot) sans au moins 1
utilisateur. Je propose donc de fixer la valeur par défaut de $total
à 1 et non à 0. Ceci évite le blocage de la liste lorsque le fichier
stats est absent (il est créé), vide (touch) ou contient des données
qui ne « matchent » pas le motif de la ligne 4665 de List.pm (solution
de repli sans blocage).

Le comportement affecte les versions 2.x et 3.x de sympa.
Le problème est bloquant (pour la/les liste(s)).
Le mini-patch, contre la v3.3.3, est joint (très mini).

--
bug
« when all you have is a hammer, everything looks like a nail »

diff -Naur List.pm.orig List.pm
--- List.pm.orig Thu Mar 21 11:00:09 2002
+++ List.pm Fri Mar 22 15:38:17 2002
@@ -4667,12 +4667,12 @@
$total = $6;
} else {
$stats = [ 0, 0, 0, 0];
- $total = 0;
+ $total = 1;
}
close(L);
} else {
$stats = [ 0, 0, 0, 0];
- $total = 0;
+ $total = 1;
}

## Return the array.
@@ -5429,7 +5429,7 @@
do_log('debug2', 'List::_save_stats_file(%s, %d)', $file, $total);

open(L, "> $file") || return undef;
- printf L "%d %d %d %d %d\n", @{$stats}, $total;
+ printf L "%d %d %.0f %.0f %d\n", @{$stats}, $total;
close(L);
}



  • Bug stats sympa 2.x, 3.x, Guy Brand, 22/03/2002

Archives gérées par MHonArc 2.6.19+.

Haut de le page