GBA e-Reader: Improve error handling in image loading

This commit is contained in:
Vicki Pfau 2023-04-05 04:54:51 -07:00
parent 8c55769afc
commit efcdd29109
1 changed files with 22 additions and 3 deletions

View File

@ -888,7 +888,11 @@ struct EReaderScan* EReaderScanLoadImagePNG(const char* filename) {
} }
png_infop info = png_create_info_struct(png); png_infop info = png_create_info_struct(png);
png_infop end = png_create_info_struct(png); png_infop end = png_create_info_struct(png);
PNGReadHeader(png, info); if (!PNGReadHeader(png, info)) {
PNGReadClose(png, info, end);
vf->close(vf);
return NULL;
}
unsigned height = png_get_image_height(png, info); unsigned height = png_get_image_height(png, info);
unsigned width = png_get_image_width(png, info); unsigned width = png_get_image_width(png, info);
int type = png_get_color_type(png, info); int type = png_get_color_type(png, info);
@ -900,19 +904,34 @@ struct EReaderScan* EReaderScanLoadImagePNG(const char* filename) {
break; break;
} }
image = malloc(height * width * 3); image = malloc(height * width * 3);
PNGReadPixels(png, info, image, width, height, width); if (!image) {
goto out;
}
if (!PNGReadPixels(png, info, image, width, height, width)) {
free(image);
image = NULL;
goto out;
}
break; break;
case PNG_COLOR_TYPE_RGBA: case PNG_COLOR_TYPE_RGBA:
if (depth != 8) { if (depth != 8) {
break; break;
} }
image = malloc(height * width * 4); image = malloc(height * width * 4);
PNGReadPixelsA(png, info, image, width, height, width); if (!image) {
goto out;
}
if (!PNGReadPixelsA(png, info, image, width, height, width)) {
free(image);
image = NULL;
goto out;
}
break; break;
default: default:
break; break;
} }
PNGReadFooter(png, end); PNGReadFooter(png, end);
out:
PNGReadClose(png, info, end); PNGReadClose(png, info, end);
vf->close(vf); vf->close(vf);
if (!image) { if (!image) {