#5895 - Fixed potential signed integer overflow in Checkother:getvalue. Added regression test.

This commit is contained in:
orbitcowboy 2014-06-05 16:41:10 +02:00
parent f6c9320aee
commit 6d0f490138
2 changed files with 13 additions and 1 deletions

View File

@ -1223,7 +1223,7 @@ template<class T> static T getvalue(const int test, const T value1, const T valu
case 2:
return value1;
case 3:
return (value1 + value2) / (T)2;
return (T)(value1*0.5 + value2*0.5);
case 4:
return value2;
case 5: {

View File

@ -196,6 +196,8 @@ private:
TEST_CASE(checkCommaSeparatedReturn);
TEST_CASE(checkComparisonFunctionIsAlwaysTrueOrFalse);
TEST_CASE(integerOverflow) // #5895
}
void check(const char code[], const char *filename = nullptr, bool experimental = false, bool inconclusive = true, bool posix = false, bool runSimpleChecks=true, Settings* settings = 0) {
@ -7246,6 +7248,16 @@ private:
"}");
ASSERT_EQUALS("", errout.str());
}
void integerOverflow() { // 5895
// no signed integer overflow should happen
check("#define A 0x89504e470d0a1a0a\n"
"#define B 0x8a4d4e470d0a1a0a\n"
"void f(unsigned long long ull) {\n"
" if (ull == A || ull == B);\n"
"}\n");
ASSERT_EQUALS("", errout.str());
}
};
REGISTER_TEST(TestOther)