LIBPNG VALIDER UN FICHIER PNG

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 23 oct. 2006 à 07:32
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 23 oct. 2006 à 18:10
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40032-libpng-valider-un-fichier-png

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
23 oct. 2006 à 18:10
Problème de fclose toujours présent, car tu fais un return sauvage si fread échoue
xtremejames183 Messages postés 32 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 14 avril 2009
23 oct. 2006 à 17:44
Le choix est arbitraire on peut verifier autant de bit qu'on veut , pour le fclose est une petite faute que j'ai corriger
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
23 oct. 2006 à 15:26
Cette source ne pourra malheureusement pas rester pour les raisons énuméré par V56.
(Laisse le temps de lire ce message)
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
23 oct. 2006 à 12:30
Notez le fclose(fp); qui n'a aucune chance d'être exécuté puisqu'il se trouve après le return
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
23 oct. 2006 à 07:32
Si je comprends bien, tu ne fais que vérifier que les 8 premiers bits correspondent à une signature
Pas besoin d'une libpng pour ca:

typedef unsigned char png_byte;
#define png_memcmp memcmp

int PNGAPI
png_sig_cmp(png_bytep sig, png_size_t start, png_size_t num_to_check)
{
png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
if (num_to_check > 8)
num_to_check = 8;
else if (num_to_check < 1)
return (0);

if (start > 7)
return (0);

if (start + num_to_check > 8)
num_to_check = 8 - start;

return ((int)(png_memcmp(&sig[start], &png_signature[start], num_to_check)));
}

Un petit peu léger ton code...
Rejoignez-nous