(svn r20162) -Fix [FS#3954]: integer comparison failed in case the difference was more than "MAX_UINT"/2
This commit is contained in:
		@@ -1757,6 +1757,48 @@ function Regression::PrintSubsidy(subsidy_id)
 | 
				
			|||||||
	print("        GetCargoType():        " + AISubsidy.GetCargoType(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()
 | 
					function Regression::Start()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -1822,5 +1864,7 @@ function Regression::Start()
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	print("  IsEventWaiting:        false");
 | 
						print("  IsEventWaiting:        false");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						this.Math();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8632,4 +8632,37 @@ ERROR: IsEnd() is invalid as Begin() is never called
 | 
				
			|||||||
    GetEventType:        6
 | 
					    GetEventType:        6
 | 
				
			||||||
      Unknown Event
 | 
					      Unknown Event
 | 
				
			||||||
  IsEventWaiting:        false
 | 
					  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.
 | 
					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:
 | 
							case OT_STRING:
 | 
				
			||||||
			_RET_SUCCEED(scstrcmp(_stringval(o1),_stringval(o2)));
 | 
								_RET_SUCCEED(scstrcmp(_stringval(o1),_stringval(o2)));
 | 
				
			||||||
		case OT_INTEGER:
 | 
							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:
 | 
							case OT_FLOAT:
 | 
				
			||||||
			_RET_SUCCEED((_float(o1)<_float(o2))?-1:1);
 | 
								_RET_SUCCEED((_float(o1)<_float(o2))?-1:1);
 | 
				
			||||||
		case OT_TABLE:
 | 
							case OT_TABLE:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user