mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-06-01 06:44:27 +08:00
Avoid undefined signed overflow in SDLTest_RandomIntegerInRange
Partial backport of efba42a67b
This commit is contained in:
@@ -153,10 +153,10 @@ Sint32 SDLTest_RandomIntegerInRange(Sint32 pMin, Sint32 pMax)
|
|||||||
{
|
{
|
||||||
Sint64 min = pMin;
|
Sint64 min = pMin;
|
||||||
Sint64 max = pMax;
|
Sint64 max = pMax;
|
||||||
Sint64 temp;
|
Uint64 range;
|
||||||
Sint64 number;
|
|
||||||
|
|
||||||
if (pMin > pMax) {
|
if (pMin > pMax) {
|
||||||
|
Sint32 temp;
|
||||||
temp = min;
|
temp = min;
|
||||||
min = max;
|
min = max;
|
||||||
max = temp;
|
max = temp;
|
||||||
@@ -164,10 +164,13 @@ Sint32 SDLTest_RandomIntegerInRange(Sint32 pMin, Sint32 pMax)
|
|||||||
return (Sint32)min;
|
return (Sint32)min;
|
||||||
}
|
}
|
||||||
|
|
||||||
number = SDLTest_RandomUint32();
|
range = (Sint64)max - (Sint64)min;
|
||||||
/* invocation count increment in preceeding call */
|
if (range < SDL_MAX_SINT32) {
|
||||||
|
return min + (Sint32) (SDLTest_RandomUint32() % (range + 1));
|
||||||
return (Sint32)((number % ((max + 1) - min)) + min);
|
} else {
|
||||||
|
Uint64 add = SDLTest_RandomUint32() | SDLTest_RandomUint32();
|
||||||
|
return (Sint32) (min + (Sint64) (add % (range + 1)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* !
|
/* !
|
||||||
|
|||||||
Reference in New Issue
Block a user