fix a potential crasher.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4672 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2014-05-30 15:47:04 +00:00
parent a601a18708
commit 3c8ece88ed

View file

@ -1228,9 +1228,10 @@ fill_input_buffer (j_decompress_ptr cinfo)
memcpy(src->buffer, &src->infile[src->currentpos], nbytes); memcpy(src->buffer, &src->infile[src->currentpos], nbytes);
src->currentpos+=nbytes; src->currentpos+=nbytes;
if (nbytes <= 0) { if (nbytes <= 0)
{
if (src->start_of_file) /* Treat empty input file as fatal error */ if (src->start_of_file) /* Treat empty input file as fatal error */
ERREXIT(cinfo, JERR_INPUT_EMPTY); ERREXIT(cinfo, JERR_INPUT_EMPTY);
WARNMS(cinfo, JWRN_JPEG_EOF); WARNMS(cinfo, JWRN_JPEG_EOF);
/* Insert a fake EOI marker */ /* Insert a fake EOI marker */
src->buffer[0] = (JOCTET) 0xFF; src->buffer[0] = (JOCTET) 0xFF;
@ -1323,6 +1324,8 @@ qbyte *ReadJPEGFile(qbyte *infile, int length, int *width, int *height)
JSAMPARRAY buffer; /* Output row buffer */ JSAMPARRAY buffer; /* Output row buffer */
int size_stride; /* physical row width in output buffer */ int size_stride; /* physical row width in output buffer */
memset(&cinfo, 0, sizeof(cinfo));
if (!LIBJPEG_LOADED()) if (!LIBJPEG_LOADED())
return NULL; return NULL;
@ -2308,6 +2311,7 @@ texid_tf GL_ReadTextureDDS(const char *iname, unsigned char *buffer, int filesiz
int pad; int pad;
unsigned int w, h; unsigned int w, h;
int divsize, blocksize; int divsize, blocksize;
qboolean warned = false;
ddsheader fmtheader; ddsheader fmtheader;
if (*(int*)buffer != *(int*)"DDS " || qrenderer != QR_OPENGL) if (*(int*)buffer != *(int*)"DDS " || qrenderer != QR_OPENGL)
@ -2346,7 +2350,10 @@ texid_tf GL_ReadTextureDDS(const char *iname, unsigned char *buffer, int filesiz
blocksize = 16; blocksize = 16;
} }
else else
{
Con_Printf("Unsupported dds fourcc in %s\n", iname);
return r_nulltex; return r_nulltex;
}
if (!qglCompressedTexImage2DARB) if (!qglCompressedTexImage2DARB)
return r_nulltex; return r_nulltex;
@ -2365,14 +2372,15 @@ texid_tf GL_ReadTextureDDS(const char *iname, unsigned char *buffer, int filesiz
datasize = max(divsize, w)/divsize * max(divsize, h)/divsize * blocksize; datasize = max(divsize, w)/divsize * max(divsize, h)/divsize * blocksize;
qglCompressedTexImage2DARB(GL_TEXTURE_2D, mipnum, intfmt, w, h, 0, datasize, buffer); qglCompressedTexImage2DARB(GL_TEXTURE_2D, mipnum, intfmt, w, h, 0, datasize, buffer);
if (qglGetError()) if (qglGetError())
Con_Printf("Incompatible dds file %s (mip %i)\n", iname, mipnum); {
if (!warned)
Con_Printf("Incompatible dds file %s (mip %i)\n", iname, mipnum);
warned = true;
}
buffer += datasize; buffer += datasize;
w = (w+1)>>1; w = (w+1)>>1;
h = (h+1)>>1; h = (h+1)>>1;
} }
if (qglGetError())
Con_Printf("Incompatible dds file %s\n", iname);
if (nummips>1) if (nummips>1)
{ {
@ -2385,6 +2393,13 @@ texid_tf GL_ReadTextureDDS(const char *iname, unsigned char *buffer, int filesiz
qglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); qglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max);
} }
if (qglGetError())
{
if (!warned)
Con_Printf("Incompatible dds file %s\n", iname);
warned = true;
}
return texnum; return texnum;
} }
#endif #endif
@ -2745,7 +2760,7 @@ qboolean R_LoadTextureFromMemory(texid_t *tex, int flags, const char *iname, cha
if (!(flags&IF_NOGAMMA) && !vid_hardwaregamma.value) if (!(flags&IF_NOGAMMA) && !vid_hardwaregamma.value)
BoostGamma(rgbadata, image_width, image_height); BoostGamma(rgbadata, image_width, image_height);
if (hasalpha) if (hasalpha)
flags &= ~IF_NOALPHA; flags &= ~IF_NOALPHA;
else if (!(flags & IF_NOALPHA)) else if (!(flags & IF_NOALPHA))
{ {
@ -2754,11 +2769,11 @@ qboolean R_LoadTextureFromMemory(texid_t *tex, int flags, const char *iname, cha
unsigned char *alphadata; unsigned char *alphadata;
char *alph; char *alph;
COM_StripExtension(fname, aname, sizeof(aname)); COM_StripExtension(fname, aname, sizeof(aname));
Q_strncatz(aname, "_alpha", sizeof(aname)); Q_strncatz(aname, "_alpha.", sizeof(aname));
Q_strncatz(aname, COM_FileExtension(fname), sizeof(aname)); Q_strncatz(aname, COM_FileExtension(fname), sizeof(aname));
if ((alph = COM_LoadFile (aname, 5))) if ((alph = COM_LoadFile (aname, 5)))
{ {
if ((alphadata = Read32BitImageFile(alph, filesize, &alpha_width, &alpha_height, &hasalpha, aname))) if ((alphadata = Read32BitImageFile(alph, com_filesize, &alpha_width, &alpha_height, &hasalpha, aname)))
{ {
if (alpha_width == image_width && alpha_height == image_height) if (alpha_width == image_width && alpha_height == image_height)
{ {