From 9a40616f907abb2b4262970e44818630fb2d115a Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 13 Feb 2007 10:09:17 +0000 Subject: [PATCH] SDL_image shouldn't dereference a rwops if it's NULL. Fixes Bugzilla #284. --- IMG_bmp.c | 2 ++ IMG_gif.c | 2 ++ IMG_jpg.c | 2 ++ IMG_lbm.c | 2 ++ IMG_pcx.c | 2 ++ IMG_png.c | 2 ++ IMG_pnm.c | 2 ++ IMG_tif.c | 2 ++ IMG_xcf.c | 2 ++ IMG_xpm.c | 8 ++++++-- IMG_xv.c | 2 ++ IMG_xxx.c | 2 ++ 12 files changed, 28 insertions(+), 2 deletions(-) diff --git a/IMG_bmp.c b/IMG_bmp.c index 002e9809..b7bf9684 100644 --- a/IMG_bmp.c +++ b/IMG_bmp.c @@ -36,6 +36,8 @@ int IMG_isBMP(SDL_RWops *src) int is_BMP; char magic[2]; + if ( !src ) + return 0; start = SDL_RWtell(src); is_BMP = 0; if ( SDL_RWread(src, magic, sizeof(magic), 1) ) { diff --git a/IMG_gif.c b/IMG_gif.c index be97d672..ef0ce0e1 100644 --- a/IMG_gif.c +++ b/IMG_gif.c @@ -36,6 +36,8 @@ int IMG_isGIF(SDL_RWops *src) int is_GIF; char magic[6]; + if ( !src ) + return 0; start = SDL_RWtell(src); is_GIF = 0; if ( SDL_RWread(src, magic, sizeof(magic), 1) ) { diff --git a/IMG_jpg.c b/IMG_jpg.c index 2cbd592a..fb0c6cda 100644 --- a/IMG_jpg.c +++ b/IMG_jpg.c @@ -179,6 +179,8 @@ int IMG_isJPG(SDL_RWops *src) /* Blame me, not Sam, if this doesn't work right. */ /* And don't forget to report the problem to the the sdl list too! */ + if ( !src ) + return 0; start = SDL_RWtell(src); is_JPG = 0; in_scan = 0; diff --git a/IMG_lbm.c b/IMG_lbm.c index c32ba1cb..f52724e6 100644 --- a/IMG_lbm.c +++ b/IMG_lbm.c @@ -65,6 +65,8 @@ int IMG_isLBM( SDL_RWops *src ) int is_LBM; Uint8 magic[4+4+4]; + if ( !src ) + return 0; start = SDL_RWtell(src); is_LBM = 0; if ( SDL_RWread( src, magic, sizeof(magic), 1 ) ) diff --git a/IMG_pcx.c b/IMG_pcx.c index ed97315b..231e2af2 100644 --- a/IMG_pcx.c +++ b/IMG_pcx.c @@ -69,6 +69,8 @@ int IMG_isPCX(SDL_RWops *src) const int PCX_RunLength_Encoding = 1; struct PCXheader pcxh; + if ( !src ) + return 0; start = SDL_RWtell(src); is_PCX = 0; if ( SDL_RWread(src, &pcxh, sizeof(pcxh), 1) == 1 ) { diff --git a/IMG_png.c b/IMG_png.c index a5c04fee..8ab2004d 100644 --- a/IMG_png.c +++ b/IMG_png.c @@ -273,6 +273,8 @@ int IMG_isPNG(SDL_RWops *src) if ( IMG_InitPNG() < 0 ) { return 0; } + if ( !src ) + return 0; start = SDL_RWtell(src); is_PNG = 0; if ( SDL_RWread(src, buf, 1, PNG_BYTES_TO_CHECK) == PNG_BYTES_TO_CHECK ) { diff --git a/IMG_pnm.c b/IMG_pnm.c index 72375ebf..958bd960 100644 --- a/IMG_pnm.c +++ b/IMG_pnm.c @@ -44,6 +44,8 @@ int IMG_isPNM(SDL_RWops *src) int is_PNM; char magic[2]; + if ( !src ) + return 0; start = SDL_RWtell(src); is_PNM = 0; if ( SDL_RWread(src, magic, sizeof(magic), 1) ) { diff --git a/IMG_tif.c b/IMG_tif.c index 1d5102c5..6cf726ef 100644 --- a/IMG_tif.c +++ b/IMG_tif.c @@ -174,6 +174,8 @@ int IMG_isTIF(SDL_RWops* src) if ( IMG_InitTIF() < 0 ) { return 0; } + if ( !src ) + return 0; start = SDL_RWtell(src); is_TIF = 0; diff --git a/IMG_xcf.c b/IMG_xcf.c index d32a0bf5..37927ded 100644 --- a/IMG_xcf.c +++ b/IMG_xcf.c @@ -213,6 +213,8 @@ int IMG_isXCF(SDL_RWops *src) int is_XCF; char magic[14]; + if ( !src ) + return 0; start = SDL_RWtell(src); is_XCF = 0; if ( SDL_RWread(src, magic, sizeof(magic), 1) ) { diff --git a/IMG_xpm.c b/IMG_xpm.c index 87529790..fdd04dd2 100644 --- a/IMG_xpm.c +++ b/IMG_xpm.c @@ -59,6 +59,8 @@ int IMG_isXPM(SDL_RWops *src) int is_XPM; char magic[9]; + if ( !src ) + return 0; start = SDL_RWtell(src); is_XPM = 0; if ( SDL_RWread(src, magic, sizeof(magic), 1) ) { @@ -326,7 +328,8 @@ static SDL_Surface *load_xpm(char **xpm, SDL_RWops *src) linebuf = NULL; buflen = 0; - start = SDL_RWtell(src); + if ( src ) + start = SDL_RWtell(src); if(xpm) xpmlines = &xpm; @@ -453,7 +456,8 @@ static SDL_Surface *load_xpm(char **xpm, SDL_RWops *src) done: if(error) { - SDL_RWseek(src, start, SEEK_SET); + if ( src ) + SDL_RWseek(src, start, SEEK_SET); if ( image ) { SDL_FreeSurface(image); image = NULL; diff --git a/IMG_xv.c b/IMG_xv.c index 2d15cb13..e685f5b7 100644 --- a/IMG_xv.c +++ b/IMG_xv.c @@ -89,6 +89,8 @@ int IMG_isXV(SDL_RWops *src) int is_XV; int w, h; + if ( !src ) + return 0; start = SDL_RWtell(src); is_XV = 0; if ( get_header(src, &w, &h) == 0 ) { diff --git a/IMG_xxx.c b/IMG_xxx.c index 524af494..9a014d6e 100644 --- a/IMG_xxx.c +++ b/IMG_xxx.c @@ -34,6 +34,8 @@ int IMG_isXXX(SDL_RWops *src) int start; int is_XXX; + if ( !src ) + return 0; start = SDL_RWtell(src); is_XXX = 0;