diff options
| author | Jeffrey Walton <noloader@gmail.com> | 2015-07-30 10:57:25 -0400 |
|---|---|---|
| committer | Jeffrey Walton <noloader@gmail.com> | 2015-07-30 10:57:25 -0400 |
| commit | e5171450e24b1556f53f9d1d200fae89fdc2d97a (patch) | |
| tree | 6823c5e7d5a4c922e1db2d41a50044134f0ffad0 /validat0.cpp | |
| parent | 5a35640912a4848b48e1a76121efd37f7df387f5 (diff) | |
| download | cryptopp-git-e5171450e24b1556f53f9d1d200fae89fdc2d97a.tar.gz | |
Fixed validation failure due to collision of type sizes between int and long
Diffstat (limited to 'validat0.cpp')
| -rw-r--r-- | validat0.cpp | 52 |
1 files changed, 33 insertions, 19 deletions
diff --git a/validat0.cpp b/validat0.cpp index a612c8b2..64144e7d 100644 --- a/validat0.cpp +++ b/validat0.cpp @@ -336,20 +336,26 @@ bool TestConversion() { signed int v; bool p = true; { - 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; - unsigned long v3 = std::numeric_limits<unsigned long>::max(); p = !SafeConvert(v3, 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; - unsigned long long v3 = std::numeric_limits<unsigned long long>::max(); p = !SafeConvert(v3, v) && p; + // 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 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; + } + // 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 v2 = std::numeric_limits<signed long long>::max(); p = !SafeConvert(v2, v) && p; + unsigned long long v3 = std::numeric_limits<unsigned long long>::max(); p = !SafeConvert(v3, v) && p; + } + + std::cout << (!p ? "FAILED " : "passed ") << " signed int overflow" << std::endl; + pass &= p; } - - std::cout << (!p ? "FAILED " : "passed ") << " signed int overflow" << std::endl; - pass &= p; } - + /********** unsigned int **********/ { unsigned int v1, v2; bool p = true; @@ -366,14 +372,20 @@ bool TestConversion() { unsigned int v; bool p = true; { - unsigned long v1 = std::numeric_limits<unsigned long>::max(); p = !SafeConvert(v1, v) && p; - } - { - unsigned long long v1 = std::numeric_limits<unsigned long long>::max(); p = !SafeConvert(v1, v) && p; + // 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; + } + // 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; + } + + std::cout << (!p ? "FAILED " : "passed ") << " unsigned int overflow" << std::endl; + pass &= p; } - - std::cout << (!p ? "FAILED " : "passed ") << " unsigned int overflow" << std::endl; - pass &= p; } /********** signed long **********/ @@ -393,6 +405,7 @@ bool TestConversion() /********** signed long overflow **********/ { + // Guard x86_64 collision of type sizes if(sizeof(signed long) != sizeof(signed long long)) { signed long v; bool p = true; @@ -425,6 +438,7 @@ bool TestConversion() /********** unsigned long overflow **********/ { + // Guard x86_64 collision of type sizes if(sizeof(unsigned long) != sizeof(unsigned long long)) { unsigned long v; bool p = true; |
