Fixed validation failure due to collision of type sizes between int and long

pull/35/head
Jeffrey Walton 2015-07-30 10:57:25 -04:00
parent 5a35640912
commit e5171450e2
1 changed files with 33 additions and 19 deletions

View File

@ -335,11 +335,16 @@ bool TestConversion()
/********** signed int overflow **********/ /********** signed int overflow **********/
{ {
signed int v; bool p = true; signed int v; bool p = true;
{
// Guard i686 collision of type sizes
if(sizeof(signed int) != sizeof(signed long))
{ {
signed long v1 = std::numeric_limits<signed long>::min(); p = !SafeConvert(v1, v) && p; signed long v1 = std::numeric_limits<signed long>::min(); p = !SafeConvert(v1, v) && p;
signed long v2 = std::numeric_limits<signed long>::max(); p = !SafeConvert(v2, v) && p; signed long v2 = std::numeric_limits<signed long>::max(); p = !SafeConvert(v2, v) && p;
unsigned long v3 = std::numeric_limits<unsigned long>::max(); p = !SafeConvert(v3, v) && p; unsigned long v3 = std::numeric_limits<unsigned long>::max(); p = !SafeConvert(v3, v) && p;
} }
// Guard i686 collision of type sizes
if(sizeof(signed int) != sizeof(signed long long))
{ {
signed long long v1 = std::numeric_limits<signed long long>::min(); p = !SafeConvert(v1, v) && p; signed long long v1 = std::numeric_limits<signed long long>::min(); p = !SafeConvert(v1, v) && p;
signed long long v2 = std::numeric_limits<signed long long>::max(); p = !SafeConvert(v2, v) && p; signed long long v2 = std::numeric_limits<signed long long>::max(); p = !SafeConvert(v2, v) && p;
@ -349,6 +354,7 @@ bool TestConversion()
std::cout << (!p ? "FAILED " : "passed ") << " signed int overflow" << std::endl; std::cout << (!p ? "FAILED " : "passed ") << " signed int overflow" << std::endl;
pass &= p; pass &= p;
} }
}
/********** unsigned int **********/ /********** unsigned int **********/
{ {
@ -365,9 +371,14 @@ bool TestConversion()
/********** unsigned int overflow **********/ /********** unsigned int overflow **********/
{ {
unsigned int v; bool p = true; unsigned int v; bool p = true;
{
// Guard i686 collision of type sizes
if(sizeof(unsigned int) != sizeof(unsigned long))
{ {
unsigned long v1 = std::numeric_limits<unsigned long>::max(); p = !SafeConvert(v1, v) && p; unsigned long v1 = std::numeric_limits<unsigned long>::max(); p = !SafeConvert(v1, v) && p;
} }
// Guard i686 collision of type sizes
if(sizeof(unsigned int) != sizeof(unsigned long long))
{ {
unsigned long long v1 = std::numeric_limits<unsigned long long>::max(); p = !SafeConvert(v1, v) && p; unsigned long long v1 = std::numeric_limits<unsigned long long>::max(); p = !SafeConvert(v1, v) && p;
} }
@ -375,6 +386,7 @@ bool TestConversion()
std::cout << (!p ? "FAILED " : "passed ") << " unsigned int overflow" << std::endl; std::cout << (!p ? "FAILED " : "passed ") << " unsigned int overflow" << std::endl;
pass &= p; pass &= p;
} }
}
/********** signed long **********/ /********** signed long **********/
{ {
@ -393,6 +405,7 @@ bool TestConversion()
/********** signed long overflow **********/ /********** signed long overflow **********/
{ {
// Guard x86_64 collision of type sizes
if(sizeof(signed long) != sizeof(signed long long)) if(sizeof(signed long) != sizeof(signed long long))
{ {
signed long v; bool p = true; signed long v; bool p = true;
@ -425,6 +438,7 @@ bool TestConversion()
/********** unsigned long overflow **********/ /********** unsigned long overflow **********/
{ {
// Guard x86_64 collision of type sizes
if(sizeof(unsigned long) != sizeof(unsigned long long)) if(sizeof(unsigned long) != sizeof(unsigned long long))
{ {
unsigned long v; bool p = true; unsigned long v; bool p = true;