Properly validate dimensions in texture init
This commit is contained in:
parent
10e929d4bb
commit
d24e404582
@ -36,6 +36,15 @@ static inline bool addrIsVRAM(const void* addr)
|
|||||||
return vaddr >= 0x1F000000 && vaddr < 0x1F600000;
|
return vaddr >= 0x1F000000 && vaddr < 0x1F600000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool checkTexSize(u32 size)
|
||||||
|
{
|
||||||
|
if (size < 8 || size > 1024)
|
||||||
|
return false;
|
||||||
|
if (size & (size-1))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void allocFree(void* addr)
|
static inline void allocFree(void* addr)
|
||||||
{
|
{
|
||||||
if (addrIsVRAM(addr))
|
if (addrIsVRAM(addr))
|
||||||
@ -59,7 +68,7 @@ static void C3Di_TexCubeDelete(C3D_TexCube* cube)
|
|||||||
|
|
||||||
bool C3D_TexInitWithParams(C3D_Tex* tex, C3D_TexCube* cube, C3D_TexInitParams p)
|
bool C3D_TexInitWithParams(C3D_Tex* tex, C3D_TexCube* cube, C3D_TexInitParams p)
|
||||||
{
|
{
|
||||||
if ((p.width|p.height) & 7) return false;
|
if (!checkTexSize(p.width) || !checkTexSize(p.height)) return false;
|
||||||
|
|
||||||
bool isCube = typeIsCube(p.type);
|
bool isCube = typeIsCube(p.type);
|
||||||
if (isCube && !cube) return false;
|
if (isCube && !cube) return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user