Fichier ashd/src/sendfile.c (je suis tombé sur ce fichier en tentant de compiler le bousin)
static char *attrmimetype(char *file)
{
#ifdef HAVE_XATTR
static char buf[1024];
int i;
ssize_t sz;
Cependant, renvoyer l'adresse d'une variable locale c'est pas bien, et c'est encore pire quand elle est statique. Quid d'appels consécutifs, parallèles ?
Les débutants utilisent la post-incrémentation et ne comprennent pas que ni sizeof ni return ne sont des fonctions.
Le copier-coller c'est mal, DRY qu'il y'en a qui disent.
Tiens, c'est pas documenté, donc on ne sait même pas qu'il faut copier 1024 - 1 caractère depuis le pointeur retourné dans un nouvel emplacement. Une fonction difficile à utiliser manipulant des chaînes conduit inexorablement à des problèmes de sécurité.
# Sécurité ?
Posté par LupusMic (site web personnel, Mastodon) . En réponse à la dépêche Un nouveau serveur httpd : Ashd, A Sane HTTP Daemon. Évalué à 9.
static char *attrmimetype(char *file)
{
#ifdef HAVE_XATTR
static char buf[1024];
int i;
ssize_t sz;
if((sz = getxattr(file, "user.ash-mime-type", buf, sizeof(buf) - 1)) > 0)
goto found;
if((sz = getxattr(file, "user.mime-type", buf, sizeof(buf) - 1)) > 0)
goto found;
if((sz = getxattr(file, "user.mime_type", buf, sizeof(buf) - 1)) > 0)
goto found;
if((sz = getxattr(file, "user.Content-Type", buf, sizeof(buf) - 1)) > 0)
goto found;
return(NULL);
found:
for(i = 0; i < sz; i++) {
if((buf[sz] < 32) || (buf[sz] >= 128))
return(NULL);
}
buf[sz] = 0;
return(buf);
#else
return(NULL);
#endif
}
Bon, goto bien utilisé ça peut être pratique.
Cependant, renvoyer l'adresse d'une variable locale c'est pas bien, et c'est encore pire quand elle est statique. Quid d'appels consécutifs, parallèles ?
Les débutants utilisent la post-incrémentation et ne comprennent pas que ni sizeof ni return ne sont des fonctions.
Le copier-coller c'est mal, DRY qu'il y'en a qui disent.
Tiens, c'est pas documenté, donc on ne sait même pas qu'il faut copier 1024 - 1 caractère depuis le pointeur retourné dans un nouvel emplacement. Une fonction difficile à utiliser manipulant des chaînes conduit inexorablement à des problèmes de sécurité.
Et je n'ai regardé qu'une fonciton.