mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-28 12:30:46 +00:00
- added some quick rejection checks for Doom patch textures.
Since the checker reads all lumps completely into memory to check them, this can take quite a while. Reject everything that can be just by looking at the size fields immediately, without loading the rest.
This commit is contained in:
parent
ac99e35c9a
commit
ccfd20e074
1 changed files with 9 additions and 3 deletions
|
@ -127,13 +127,19 @@ FImageSource *PatchImage_TryCreate(FileReader & file, int lumpnum)
|
||||||
{
|
{
|
||||||
bool isalpha;
|
bool isalpha;
|
||||||
|
|
||||||
if (!CheckIfPatch(file, isalpha)) return NULL;
|
|
||||||
file.Seek(0, FileReader::SeekSet);
|
|
||||||
int width = file.ReadUInt16();
|
int width = file.ReadUInt16();
|
||||||
int height = file.ReadUInt16();
|
int height = file.ReadUInt16();
|
||||||
int leftoffset = file.ReadInt16();
|
int leftoffset = file.ReadInt16();
|
||||||
int topoffset = file.ReadInt16();
|
int topoffset = file.ReadInt16();
|
||||||
return new FPatchTexture(lumpnum, width, height, leftoffset, topoffset, isalpha);
|
// quickly reject any lump which cannot be a texture without reading in all the data.
|
||||||
|
if (height > 0 && height <= 2048 && width > 0 && width <= 2048 && width < file.GetLength() / 4 && abs(leftoffset) < 4096 && abs(topoffset) < 4096)
|
||||||
|
{
|
||||||
|
file.Seek(0, FileReader::SeekSet);
|
||||||
|
if (!CheckIfPatch(file, isalpha)) return NULL;
|
||||||
|
file.Seek(8, FileReader::SeekSet);
|
||||||
|
return new FPatchTexture(lumpnum, width, height, leftoffset, topoffset, isalpha);
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
Loading…
Reference in a new issue