LIBPNG VALIDER UN FICHIER PNG

Signaler
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Problème de fclose toujours présent, car tu fais un return sauvage si fread échoue
Messages postés
32
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
14 avril 2009

Le choix est arbitraire on peut verifier autant de bit qu'on veut , pour le fclose est une petite faute que j'ai corriger
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

Cette source ne pourra malheureusement pas rester pour les raisons énuméré par V56.
(Laisse le temps de lire ce message)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Notez le fclose(fp); qui n'a aucune chance d'être exécuté puisqu'il se trouve après le return
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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...