mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-15 08:51:24 +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;
|
||||
|
||||
if (!CheckIfPatch(file, isalpha)) return NULL;
|
||||
file.Seek(0, FileReader::SeekSet);
|
||||
int width = file.ReadUInt16();
|
||||
int height = file.ReadUInt16();
|
||||
int leftoffset = 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