Serveur HTTP et Stack smashing detected - C - Programmation
Marsh Posté le 15-10-2007 à 03:06:21
Oué, il est hyper casse gueule ton code, je remettrais tout à plat, si j'étais toi, avec une gestion un peu maniaque des chaines de caractères. Le C n'est pas d'une très grande aide dans ce domaine, mais il est possible de faire des trucs potables avec un peu plus de rigueur.
Il y a des buffers overflow à gogo dans ton code, mais le plus probable se trouve sans doute à cette ligne :
char type[0x10];
contentType(req,type);
Un content-type possible est "application/octet-stream", ce qui fait largement plus que 16 octets. D'où écrasement de la valeur de retour et plantage quasi certain lorsque le thread quitte.
Marsh Posté le 15-10-2007 à 07:55:52
Casse gueule mon code ?
C'est clair qu'il est pas formidable, mais je t'avouerais qu'on n'a jamais vraiment eu de cours de mise en forme de code.
Effectivement le type[0x10] c'est une grosse erreur, on l'avait mis de cette taille sans savoir la taille d'une description, et oublié de le modifier après.
Merci beaucoup pour ton aide, je verrais ce soir si ça passe.
Marsh Posté le 15-10-2007 à 08:31:50
Sebxoii a écrit : Casse gueule mon code ? |
On s'en fout de la présentation (quoique...). Ce qu'on essaye de te faire comprendre, c'est qu'il est fragile du fait qu'il n'y a aucun contrôle sur la taille des chaines etc.
Marsh Posté le 15-10-2007 à 10:16:01
Sebxoii a écrit : Casse gueule mon code ? http://membres.lycos.fr/sebxoiii/Smileys/transpi.gif |
Ne jamais utiliser strcpy ?
Faire attention avec l'utilisation de strncpy, utiliser une variante de strlcpy si on a.
Marsh Posté le 15-10-2007 à 16:03:40
Emmanuel Delahaye a écrit :
|
Ah je pensais que la critique portait sur la répartition des fonctions/sous-fonctions que je fais un peu à l'occasion. Enfin merci pour les conseils.
Taz a écrit :
|
Je vais modifier ça à l'occasion.
edit : Merci tpierron, ça fonctionne nickel en modifiant la taille du buffer type.
Maintenant je vais essayer de rajouter quelques vérifications dès que j'écris dans un buffer. Je vais faire avec strncpy n'ayant pas strlcpy.
edit2 : Hmm en fait strncpy a l'air plutôt relou à utiliser, je viens de trouver la source de strlcpy, ça m'a l'air pas mal du tout.
Marsh Posté le 14-10-2007 à 16:40:29
Salut à tous,
Je dois réaliser un petit serveur HTTP en TP cette année, et je me retrouve complètement bloqué face à une erreur que je n'avais jamais rencontrée auparavant.
D'après gdb, le problème se situe à la sortie de manageRequest ( ligne 265 ), mais je n'ai pas réussi à lui soutirer plus d'informations.
De plus, le problème ne survient que lors de l'appel à la fonction execCGI, même si le programme ne plante pas directement dans cette fonction. Dans le cas d'une demande d'un fichier html ou d'une image, tout se passe normalement et le thread se termine sans soucis.
Si cela peut aider certains d'entre vous, voici le code source complet ainsi que les fichiers qui me servent à tester le serveur : http://sebxoiii.free.fr/Programmation/httpServer.zip
Merci d'avance.