mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 06:15:04 +00:00
(svn r20162) -Fix [FS#3954]: integer comparison failed in case the difference was more than "MAX_UINT"/2
This commit is contained in:
parent
50c7f60eca
commit
92da292fbc
@ -1757,6 +1757,48 @@ function Regression::PrintSubsidy(subsidy_id)
|
||||
print(" GetCargoType(): " + AISubsidy.GetCargoType(subsidy_id));
|
||||
}
|
||||
|
||||
function Regression::Math()
|
||||
{
|
||||
print("");
|
||||
print("--Math--");
|
||||
print(" -2147483648 < -2147483647: " + (-2147483648 < -2147483647));
|
||||
print(" -2147483648 < -1 : " + (-2147483648 < -1 ));
|
||||
print(" -2147483648 < 0 : " + (-2147483648 < 0 ));
|
||||
print(" -2147483648 < 1 : " + (-2147483648 < 1 ));
|
||||
print(" -2147483648 < 2147483647: " + (-2147483648 < 2147483647));
|
||||
|
||||
print(" -2147483647 < -2147483648: " + (-2147483647 < -2147483648));
|
||||
print(" -1 < -2147483648: " + (-1 < -2147483648));
|
||||
print(" 0 < -2147483648: " + ( 0 < -2147483648));
|
||||
print(" 1 < -2147483648: " + ( 1 < -2147483648));
|
||||
print(" 2147483647 < -2147483648: " + ( 2147483647 < -2147483648));
|
||||
|
||||
print(" -1 > 2147483647: " + (-1 > 2147483647));
|
||||
print(" -1 > 1 : " + (-1 > 1 ));
|
||||
print(" -1 > 0 : " + (-1 > 0 ));
|
||||
print(" -1 > -1 : " + (-1 > -1 ));
|
||||
print(" -1 > -2147483648: " + (-1 > -2147483648));
|
||||
|
||||
print(" 1 > 2147483647: " + ( 1 > 2147483647));
|
||||
print(" 1 > 1 : " + ( 1 > 1 ));
|
||||
print(" 1 > 0 : " + ( 1 > 0 ));
|
||||
print(" 1 > -1 : " + ( 1 > -1 ));
|
||||
print(" 1 > -2147483648: " + ( 1 > -2147483648));
|
||||
|
||||
print(" 2147483647 > 2147483646: " + ( 2147483647 > 2147483646));
|
||||
print(" 2147483647 > 1 : " + ( 2147483647 > 1 ));
|
||||
print(" 2147483647 > 0 : " + ( 2147483647 > 0 ));
|
||||
print(" 2147483647 > -1 : " + ( 2147483647 > -1 ));
|
||||
print(" 2147483647 > -2147483648: " + ( 2147483647 > -2147483648));
|
||||
|
||||
print(" 2147483646 > 2147483647: " + ( 2147483646 > 2147483647));
|
||||
print(" 1 > 2147483647: " + ( 1 > 2147483647));
|
||||
print(" 0 > 2147483647: " + ( 0 > 2147483647));
|
||||
print(" -1 > 2147483647: " + (-1 > 2147483647));
|
||||
print(" -2147483648 > 2147483647: " + (-2147483648 > 2147483647));
|
||||
|
||||
print(" 13725 > -2147483648: " + ( 13725 > -2147483648));
|
||||
}
|
||||
|
||||
function Regression::Start()
|
||||
{
|
||||
@ -1822,5 +1864,7 @@ function Regression::Start()
|
||||
}
|
||||
}
|
||||
print(" IsEventWaiting: false");
|
||||
|
||||
this.Math();
|
||||
}
|
||||
|
||||
|
@ -8632,4 +8632,37 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetEventType: 6
|
||||
Unknown Event
|
||||
IsEventWaiting: false
|
||||
|
||||
--Math--
|
||||
-2147483648 < -2147483647: true
|
||||
-2147483648 < -1 : true
|
||||
-2147483648 < 0 : true
|
||||
-2147483648 < 1 : true
|
||||
-2147483648 < 2147483647: true
|
||||
-2147483647 < -2147483648: false
|
||||
-1 < -2147483648: false
|
||||
0 < -2147483648: false
|
||||
1 < -2147483648: false
|
||||
2147483647 < -2147483648: false
|
||||
-1 > 2147483647: false
|
||||
-1 > 1 : false
|
||||
-1 > 0 : false
|
||||
-1 > -1 : false
|
||||
-1 > -2147483648: true
|
||||
1 > 2147483647: false
|
||||
1 > 1 : false
|
||||
1 > 0 : true
|
||||
1 > -1 : true
|
||||
1 > -2147483648: true
|
||||
2147483647 > 2147483646: true
|
||||
2147483647 > 1 : true
|
||||
2147483647 > 0 : true
|
||||
2147483647 > -1 : true
|
||||
2147483647 > -2147483648: true
|
||||
2147483646 > 2147483647: false
|
||||
1 > 2147483647: false
|
||||
0 > 2147483647: false
|
||||
-1 > 2147483647: false
|
||||
-2147483648 > 2147483647: false
|
||||
13725 > -2147483648: true
|
||||
ERROR: The AI died unexpectedly.
|
||||
|
3
src/3rdparty/squirrel/squirrel/sqvm.cpp
vendored
3
src/3rdparty/squirrel/squirrel/sqvm.cpp
vendored
@ -186,7 +186,8 @@ bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result)
|
||||
case OT_STRING:
|
||||
_RET_SUCCEED(scstrcmp(_stringval(o1),_stringval(o2)));
|
||||
case OT_INTEGER:
|
||||
_RET_SUCCEED(_integer(o1)-_integer(o2));
|
||||
/* FS#3954: wrong integer comparison */
|
||||
_RET_SUCCEED((_integer(o1)<_integer(o2))?-1:(_integer(o1)==_integer(o2))?0:1);
|
||||
case OT_FLOAT:
|
||||
_RET_SUCCEED((_float(o1)<_float(o2))?-1:1);
|
||||
case OT_TABLE:
|
||||
|
Loading…
Reference in New Issue
Block a user