From: Stijn Buys Date: Tue, 2 Jul 2013 17:23:35 +0000 (+0200) Subject: Fix an invalid pointer reference in the alphahack image loader, print filename on... X-Git-Tag: xonotic-v0.8.0~9^2 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=2f72e166b24cfefcb1a200bfd781332f47edb327;p=xonotic%2Fnetradiant.git Fix an invalid pointer reference in the alphahack image loader, print filename on LoadJPGBuff error messages. --- diff --git a/tools/quake3/q3map2/image.c b/tools/quake3/q3map2/image.c index 5ab1d48b..60062a17 100644 --- a/tools/quake3/q3map2/image.c +++ b/tools/quake3/q3map2/image.c @@ -402,7 +402,8 @@ image_t *ImageLoad( const char *filename ){ size = vfsLoadFile( (const char*) name, (void**) &buffer, 0 ); if ( size > 0 ) { if ( LoadJPGBuff( buffer, size, &image->pixels, &image->width, &image->height ) == -1 && image->pixels != NULL ) { - Sys_Printf( "WARNING: LoadJPGBuff: %s\n", (unsigned char*) image->pixels ); + // On error, LoadJPGBuff might store a pointer to the error message in image->pixels + Sys_Printf( "WARNING: LoadJPGBuff %s %s\n", name, (unsigned char*) image->pixels ); } alphaHack = qtrue; } @@ -460,15 +461,19 @@ image_t *ImageLoad( const char *filename ){ if ( size > 0 ) { unsigned char *pixels; int width, height; - if ( LoadJPGBuff( buffer, size, &pixels, &width, &height ) == -1 && pixels != NULL ) { - Sys_Printf( "WARNING: LoadJPGBuff: %s\n", (unsigned char*) image->pixels ); - } - if ( pixels && width == image->width && height == image->height ) { - int i; - for ( i = 0; i < width * height; ++i ) - image->pixels[4 * i + 3] = pixels[4 * i + 2]; // copy alpha from blue channel + if ( LoadJPGBuff( buffer, size, &pixels, &width, &height ) == -1 ) { + if (pixels) { + // On error, LoadJPGBuff might store a pointer to the error message in pixels + Sys_Printf( "WARNING: LoadJPGBuff %s %s\n", name, (unsigned char*) pixels ); + } + } else { + if ( width == image->width && height == image->height ) { + int i; + for ( i = 0; i < width * height; ++i ) + image->pixels[4 * i + 3] = pixels[4 * i + 2]; // copy alpha from blue channel + } + free( pixels ); } - free( pixels ); free( buffer ); } }