r90 - trunk/code/renderer
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Sep 12 11:41:05 EDT 2005
Author: ludwig
Date: 2005-09-12 11:41:05 -0400 (Mon, 12 Sep 2005)
New Revision: 90
Modified:
trunk/code/renderer/tr_image.c
Log:
fix some integer overflows
Modified: trunk/code/renderer/tr_image.c
===================================================================
--- trunk/code/renderer/tr_image.c 2005-09-08 08:34:32 UTC (rev 89)
+++ trunk/code/renderer/tr_image.c 2005-09-12 15:41:05 UTC (rev 90)
@@ -901,6 +901,11 @@
rows = -rows;
numPixels = columns * rows;
+ if(!columns || !rows || numPixels > 0x1FFFFFFF) // 4*1FFFFFFF == 0x7FFFFFFC < 0x7FFFFFFF
+ {
+ ri.Error (ERR_DROP, "LoadBMP: %s has an invalid image size\n", name);
+ }
+
if ( width )
*width = columns;
if ( height )
@@ -991,7 +996,7 @@
int len;
int dataByte, runLength;
byte *out, *pix;
- int xmax, ymax;
+ unsigned xmax, ymax;
*pic = NULL;
*palette = NULL;
@@ -1090,6 +1095,7 @@
return;
}
+ // LoadPCX32 ensures width, height < 1024
c = (*width) * (*height);
pic32 = *pic = ri.Malloc(4 * c );
for (i = 0 ; i < c ; i++) {
@@ -1120,7 +1126,7 @@
*/
static void LoadTGA ( const char *name, byte **pic, int *width, int *height)
{
- int columns, rows, numPixels;
+ unsigned columns, rows, numPixels;
byte *pixbuf;
int row, column;
byte *buf_p;
@@ -1179,14 +1185,19 @@
columns = targa_header.width;
rows = targa_header.height;
- numPixels = columns * rows;
+ numPixels = columns * rows * 4;
if (width)
*width = columns;
if (height)
*height = rows;
- targa_rgba = ri.Malloc (numPixels*4);
+ if(!columns || !rows || numPixels > 0x7FFFFFFF)
+ {
+ ri.Error (ERR_DROP, "LoadTGA: %s has an invalid image size\n", name);
+ }
+
+ targa_rgba = ri.Malloc (numPixels);
*pic = targa_rgba;
if (targa_header.id_length != 0)
@@ -1361,7 +1372,7 @@
/* This struct contains the JPEG decompression parameters and pointers to
* working space (which is allocated as needed by the JPEG library).
*/
- struct jpeg_decompress_struct cinfo;
+ struct jpeg_decompress_struct cinfo = {0};
/* We use our private extension JPEG error handler.
* Note that this struct must live as long as the main JPEG parameter
* struct, to avoid dangling-pointer problems.
@@ -1377,8 +1388,8 @@
struct jpeg_error_mgr jerr;
/* More stuff */
JSAMPARRAY buffer; /* Output row buffer */
- int row_stride; /* physical row width in output buffer */
- int pixelcount;
+ unsigned row_stride; /* physical row width in output buffer */
+ unsigned pixelcount;
unsigned char *out, *out_converted;
byte *fbuffer;
byte *bbuf;
@@ -1442,6 +1453,14 @@
pixelcount = cinfo.output_width * cinfo.output_height;
row_stride = cinfo.output_width * cinfo.output_components;
+
+
+ if(!cinfo.output_width || !cinfo.output_height
+ || pixelcount > 0x1FFFFFFF || cinfo.output_components > 4) // 4*1FFFFFFF == 0x7FFFFFFC < 0x7FFFFFFF
+ {
+ ri.Error (ERR_DROP, "LoadJPG: %s has an invalid image size\n", filename);
+ }
+
out = ri.Malloc(pixelcount * 4);
*width = cinfo.output_width;
More information about the quake3-commits
mailing list