Skip to content

Commit f9ad754

Browse files
committed
xcf: check for some potential integer overflows.
1 parent 4e006ad commit f9ad754

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

IMG_xcf.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,18 @@ do_layer_surface(SDL_Surface * surface, SDL_RWops * src, xcf_header * head, xcf_
595595
SDL_RWseek(src, layer->hierarchy_file_offset, RW_SEEK_SET);
596596
hierarchy = read_xcf_hierarchy(src);
597597

598+
if (hierarchy->bpp > 4) { /* unsupported. */
599+
SDL_Log("Unknown Gimp image bpp (%u)\n", (unsigned int) hierarchy->bpp);
600+
free_xcf_hierarchy(hierarchy);
601+
return 1;
602+
}
603+
604+
if ((hierarchy->width > 20000) || (hierarchy->height > 20000)) { /* arbitrary limit to avoid integer overflow. */
605+
SDL_Log("Gimp image too large (%ux%u)\n", (unsigned int) hierarchy->width, (unsigned int) hierarchy->height);
606+
free_xcf_hierarchy(hierarchy);
607+
return 1;
608+
}
609+
598610
level = NULL;
599611
for (i = 0; hierarchy->level_file_offsets[i]; i++) {
600612
SDL_RWseek(src, hierarchy->level_file_offsets[i], RW_SEEK_SET);

0 commit comments

Comments
 (0)