Libpng

Signaler
Messages postés
3
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
15 novembre 2004
-
Messages postés
3
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
15 novembre 2004
-
J'essaie de lire un png en utilisant la DLL officielle ainsi que celle de zlib, et j'ai apparament une erreur dans une fonction de la lib, un access violation. J'ai pourtant pris le code conseillé sur le site officiel, et j'en ai fais une classe...

voila le code

bool c_ImagePNG::LoadPNG(char path[]){
FILE *fp;
char buffer[PNG_BYTES_TO_CHECK];

try{
if (!(fp = fopen(path, "rb"))){
error = "Error: Problem opening [";
throw error;
}
if (fread(buffer, 1, PNG_BYTES_TO_CHECK, fp) != PNG_BYTES_TO_CHECK){
fclose(fp);
error = " Error: Problem reading [";
throw error;
}
// png_sig_cmp() checks the given PNG header and returns 0 if it could be the start of a PNG file.
if(png_sig_cmp((png_byte*)buffer, (png_size_t)0, PNG_BYTES_TO_CHECK)){
fclose(fp);
error = " Error: Invalid PNG [";
throw error;
}
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if(!png_ptr){
fclose(fp);
error = " Error: Problem creating PNG read structure [";
throw error;
}
png_infop info_ptr = png_create_info_struct(png_ptr);
if(!info_ptr){
fclose(fp);
png_destroy_read_struct(&png_ptr, NULL, NULL);
error = " Error: Problem creating PNG info structure [";
throw error;
}
// Setup error handler
if (setjmp(png_jmpbuf(png_ptr))){
fclose(fp);
png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL);
error = " Error: Problem setting PNG error handler [";
throw error;
}

png_init_io(png_ptr, fp);
png_set_sig_bytes(png_ptr, PNG_BYTES_TO_CHECK);
int png_transform = PNG_TRANSFORM_IDENTITY;
png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);

et ca plante dans le png_read_png()...
vous voyez une erreur? Vous avez des suggestions?
merci d'avance
A voir également:

2 réponses

Messages postés
1
Date d'inscription
lundi 15 novembre 2004
Statut
Membre
Dernière intervention
15 novembre 2004

D'après ce que je peux lire en tapant "png_read_png" dans google, il y a une vulnérabilité dans cette fonction qui peut faire planter le programme suivant le png.
Ton code a pas l'air mauvais (bien qu'il soit tard et que je n'aies plus toutes mes capacités), donc ça peut venir du fait que tu utilises une version ancienne de la libpng et/ou que ton png est mauvais.
T'as essayé avec d'autres fichiers ?
Messages postés
3
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
15 novembre 2004

merci!

J'ai recupere la derniere version de libpng(1.2.7) dans lequel le bug de securite dont tu parles a du etre corrige.
Et j'ai essayer avec plusieurs png de sources differentes, dont le site officiel, et malheureusement j'ai toujours un access violation.

J'en arrive a me demander si comme mon code est en C++, la fonction de la DLL n'arriverait pas a acceder a mes variables, mais a priori je les envoie en parametres, donc ca ne devrait pas etre un probleme...

Si quelqu'un voit une solution, qu'il n'hesite pas!
Merci d'avance