mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-02-19 02:22:25 +00:00
Make calculations clearer and move defines to r_picformats.h
This commit is contained in:
parent
d2f3c303aa
commit
ff3f240d58
4 changed files with 20 additions and 12 deletions
|
@ -910,10 +910,6 @@ typedef struct
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MAX_PATCH_DIMENSIONS 8192
|
|
||||||
|
|
||||||
#define VALID_PATCH_LUMP_SIZE(lumplen, width) ((lumplen) >= (sizeof(INT16) * 4) + ((width) * sizeof(INT32)))
|
|
||||||
|
|
||||||
// Possible alpha types for a patch.
|
// Possible alpha types for a patch.
|
||||||
enum patchalphastyle {AST_COPY, AST_TRANSLUCENT, AST_ADD, AST_SUBTRACT, AST_REVERSESUBTRACT, AST_MODULATE, AST_OVERLAY, AST_FOG};
|
enum patchalphastyle {AST_COPY, AST_TRANSLUCENT, AST_ADD, AST_SUBTRACT, AST_REVERSESUBTRACT, AST_MODULATE, AST_OVERLAY, AST_FOG};
|
||||||
|
|
||||||
|
|
|
@ -812,7 +812,7 @@ boolean Picture_IsFlatFormat(pictureformat_t format)
|
||||||
boolean Picture_CheckIfDoomPatch(softwarepatch_t *patch, size_t size)
|
boolean Picture_CheckIfDoomPatch(softwarepatch_t *patch, size_t size)
|
||||||
{
|
{
|
||||||
// Does not meet minimum size requirements
|
// Does not meet minimum size requirements
|
||||||
if (size < PATCH_MIN_SIZE)
|
if (size < MIN_PATCH_LUMP_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
INT16 width = SHORT(patch->width);
|
INT16 width = SHORT(patch->width);
|
||||||
|
@ -835,7 +835,7 @@ boolean Picture_CheckIfDoomPatch(softwarepatch_t *patch, size_t size)
|
||||||
UINT32 ofs = LONG(patch->columnofs[x]);
|
UINT32 ofs = LONG(patch->columnofs[x]);
|
||||||
|
|
||||||
// Need one byte for an empty column (but there's patches that don't know that!)
|
// Need one byte for an empty column (but there's patches that don't know that!)
|
||||||
if (ofs < ((sizeof(INT16) * 4) + (width * sizeof(INT32))) || ofs >= (UINT32)size)
|
if (ofs < FIRST_PATCH_LUMP_COLUMN(width) || (size_t)ofs >= size)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,9 +55,21 @@ enum
|
||||||
PICDEPTH_32BPP = 32
|
PICDEPTH_32BPP = 32
|
||||||
};
|
};
|
||||||
|
|
||||||
// Minimum length of a valid Doom patch
|
// Maximum allowed dimensions for a patch
|
||||||
|
#define MAX_PATCH_DIMENSIONS 8192
|
||||||
|
|
||||||
|
// Minimum amount of bytes required for a valid patch lump header
|
||||||
|
#define MIN_PATCH_LUMP_HEADER_SIZE ((sizeof(INT16) * 4) + sizeof(INT32))
|
||||||
|
|
||||||
|
// Minimum length of a valid Doom patch lump
|
||||||
// This is the size of a 1x1 patch.
|
// This is the size of a 1x1 patch.
|
||||||
#define PATCH_MIN_SIZE ((sizeof(INT16) * 4) + (sizeof(INT32)) + 1)
|
#define MIN_PATCH_LUMP_SIZE (MIN_PATCH_LUMP_HEADER_SIZE + 1)
|
||||||
|
|
||||||
|
// Gets the offset to the very first column in a patch lump
|
||||||
|
#define FIRST_PATCH_LUMP_COLUMN(width) ((sizeof(INT16) * 4) + ((width) * sizeof(INT32)))
|
||||||
|
|
||||||
|
// Checks if the size of a lump is valid for a patch, given a certain width
|
||||||
|
#define VALID_PATCH_LUMP_SIZE(lumplen, width) ((lumplen) >= FIRST_PATCH_LUMP_COLUMN(width))
|
||||||
|
|
||||||
// Minimum size of a PNG file.
|
// Minimum size of a PNG file.
|
||||||
// See: https://web.archive.org/web/20230524232139/http://garethrees.org/2007/11/14/pngcrush/
|
// See: https://web.archive.org/web/20230524232139/http://garethrees.org/2007/11/14/pngcrush/
|
||||||
|
|
|
@ -1700,7 +1700,7 @@ lumpnum_t W_GetNumForLongName(const char *name)
|
||||||
// in its entirety.
|
// in its entirety.
|
||||||
static boolean W_IsProbablyValidPatch(UINT16 wadnum, UINT16 lumpnum)
|
static boolean W_IsProbablyValidPatch(UINT16 wadnum, UINT16 lumpnum)
|
||||||
{
|
{
|
||||||
UINT8 header[PATCH_MIN_SIZE];
|
UINT8 header[MIN_PATCH_LUMP_HEADER_SIZE];
|
||||||
|
|
||||||
I_StaticAssert(sizeof(header) >= PNG_HEADER_SIZE);
|
I_StaticAssert(sizeof(header) >= PNG_HEADER_SIZE);
|
||||||
|
|
||||||
|
@ -1708,7 +1708,7 @@ static boolean W_IsProbablyValidPatch(UINT16 wadnum, UINT16 lumpnum)
|
||||||
size_t lumplen = W_LumpLengthPwad(wadnum, lumpnum);
|
size_t lumplen = W_LumpLengthPwad(wadnum, lumpnum);
|
||||||
|
|
||||||
// Cannot be a valid Doom patch
|
// Cannot be a valid Doom patch
|
||||||
if (lumplen < sizeof(header))
|
if (lumplen < MIN_PATCH_LUMP_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Check if it's probably a valid PNG
|
// Check if it's probably a valid PNG
|
||||||
|
@ -1726,7 +1726,7 @@ static boolean W_IsProbablyValidPatch(UINT16 wadnum, UINT16 lumpnum)
|
||||||
// Otherwise, we read it as a patch
|
// Otherwise, we read it as a patch
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the first 12 bytes, plus one
|
// Read the first 12 bytes
|
||||||
W_ReadLumpHeaderPwad(wadnum, lumpnum, header, sizeof(header), 0);
|
W_ReadLumpHeaderPwad(wadnum, lumpnum, header, sizeof(header), 0);
|
||||||
|
|
||||||
softwarepatch_t patch;
|
softwarepatch_t patch;
|
||||||
|
@ -1746,7 +1746,7 @@ static boolean W_IsProbablyValidPatch(UINT16 wadnum, UINT16 lumpnum)
|
||||||
UINT32 ofs = LONG(patch.columnofs[0]);
|
UINT32 ofs = LONG(patch.columnofs[0]);
|
||||||
|
|
||||||
// Need one byte for an empty column (but there's patches that don't know that!)
|
// Need one byte for an empty column (but there's patches that don't know that!)
|
||||||
if (ofs < ((sizeof(INT16) * 4) + (width * sizeof(INT32))) || ofs >= (UINT32)lumplen)
|
if (ofs < FIRST_PATCH_LUMP_COLUMN(width) || (size_t)ofs >= lumplen)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue