summaryrefslogtreecommitdiff
path: root/validat0.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2015-07-30 10:57:25 -0400
committerJeffrey Walton <noloader@gmail.com>2015-07-30 10:57:25 -0400
commite5171450e24b1556f53f9d1d200fae89fdc2d97a (patch)
tree6823c5e7d5a4c922e1db2d41a50044134f0ffad0 /validat0.cpp
parent5a35640912a4848b48e1a76121efd37f7df387f5 (diff)
downloadcryptopp-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.cpp52
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;