mirror of
https://github.com/github/codeql.git
synced 2025-12-22 03:36:30 +01:00
Merge pull request #1594 from geoffw0/erafix7
CPP: Add test coverage for LeapYearFieldAccess.isModifiedByArithmeticOperation.
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
| test.cpp:173:2:173:52 | ... = ... | This arithmetic operation $@ uses a constant value of 365 ends up modifying the date/time located at $@, without considering leap year scenarios. | test.cpp:170:2:170:47 | ... += ... | ... += ... | test.cpp:173:2:173:52 | ... = ... | ... = ... |
|
| test.cpp:173:2:173:52 | ... = ... | This arithmetic operation $@ uses a constant value of 365 ends up modifying the date/time located at $@, without considering leap year scenarios. | test.cpp:170:2:170:47 | ... += ... | ... += ... | test.cpp:173:2:173:52 | ... = ... | ... = ... |
|
||||||
| test.cpp:174:2:174:46 | ... = ... | This arithmetic operation $@ uses a constant value of 365 ends up modifying the date/time located at $@, without considering leap year scenarios. | test.cpp:170:2:170:47 | ... += ... | ... += ... | test.cpp:174:2:174:46 | ... = ... | ... = ... |
|
| test.cpp:174:2:174:46 | ... = ... | This arithmetic operation $@ uses a constant value of 365 ends up modifying the date/time located at $@, without considering leap year scenarios. | test.cpp:170:2:170:47 | ... += ... | ... += ... | test.cpp:174:2:174:46 | ... = ... | ... = ... |
|
||||||
| test.cpp:193:2:193:24 | ... = ... | This arithmetic operation $@ uses a constant value of 365 ends up modifying the date/time located at $@, without considering leap year scenarios. | test.cpp:193:2:193:24 | ... = ... | ... = ... | test.cpp:193:2:193:24 | ... = ... | ... = ... |
|
| test.cpp:193:2:193:24 | ... = ... | This arithmetic operation $@ uses a constant value of 365 ends up modifying the date/time located at $@, without considering leap year scenarios. | test.cpp:193:2:193:24 | ... = ... | ... = ... | test.cpp:193:2:193:24 | ... = ... | ... = ... |
|
||||||
|
| test.cpp:217:2:217:52 | ... = ... | This arithmetic operation $@ uses a constant value of 365 ends up modifying the date/time located at $@, without considering leap year scenarios. | test.cpp:214:2:214:47 | ... += ... | ... += ... | test.cpp:217:2:217:52 | ... = ... | ... = ... |
|
||||||
|
| test.cpp:218:2:218:46 | ... = ... | This arithmetic operation $@ uses a constant value of 365 ends up modifying the date/time located at $@, without considering leap year scenarios. | test.cpp:214:2:214:47 | ... += ... | ... += ... | test.cpp:218:2:218:46 | ... = ... | ... = ... |
|
||||||
|
|||||||
@@ -170,8 +170,8 @@ void antipattern2()
|
|||||||
qwLongTime += 365 * 24 * 60 * 60 * 10000000LLU;
|
qwLongTime += 365 * 24 * 60 * 60 * 10000000LLU;
|
||||||
|
|
||||||
// copy back to a FILETIME
|
// copy back to a FILETIME
|
||||||
ft.dwLowDateTime = (DWORD)(qwLongTime & 0xFFFFFFFF);
|
ft.dwLowDateTime = (DWORD)(qwLongTime & 0xFFFFFFFF); // BAD
|
||||||
ft.dwHighDateTime = (DWORD)(qwLongTime >> 32);
|
ft.dwHighDateTime = (DWORD)(qwLongTime >> 32); // BAD
|
||||||
|
|
||||||
// convert back to SYSTEMTIME for display or other usage
|
// convert back to SYSTEMTIME for display or other usage
|
||||||
FileTimeToSystemTime(&ft, &st);
|
FileTimeToSystemTime(&ft, &st);
|
||||||
@@ -197,3 +197,29 @@ time_t mkTime(int days)
|
|||||||
|
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void checkedExample()
|
||||||
|
{
|
||||||
|
// get the current time as a FILETIME
|
||||||
|
SYSTEMTIME st; FILETIME ft;
|
||||||
|
GetSystemTime(&st);
|
||||||
|
SystemTimeToFileTime(&st, &ft);
|
||||||
|
|
||||||
|
// convert to a quadword (64-bit integer) to do arithmetic
|
||||||
|
ULONGLONG qwLongTime;
|
||||||
|
qwLongTime = (((ULONGLONG)ft.dwHighDateTime) << 32) + ft.dwLowDateTime;
|
||||||
|
|
||||||
|
// add a year by calculating the ticks in 365 days
|
||||||
|
// (which may be incorrect when crossing a leap day)
|
||||||
|
qwLongTime += 365 * 24 * 60 * 60 * 10000000LLU;
|
||||||
|
|
||||||
|
// copy back to a FILETIME
|
||||||
|
ft.dwLowDateTime = (DWORD)(qwLongTime & 0xFFFFFFFF); // GOOD [FALSE POSITIVE]
|
||||||
|
ft.dwHighDateTime = (DWORD)(qwLongTime >> 32); // GOOD [FALSE POSITIVE]
|
||||||
|
|
||||||
|
// convert back to SYSTEMTIME for display or other usage
|
||||||
|
if (FileTimeToSystemTime(&ft, &st) == 0)
|
||||||
|
{
|
||||||
|
// handle error...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -9,3 +9,7 @@
|
|||||||
| test.cpp:636:11:636:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:56:6:56:12 | tm_year | tm_year | test.cpp:628:12:628:19 | timeinfo | timeinfo |
|
| test.cpp:636:11:636:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:56:6:56:12 | tm_year | tm_year | test.cpp:628:12:628:19 | timeinfo | timeinfo |
|
||||||
| test.cpp:640:5:640:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:629:13:629:14 | st | st |
|
| test.cpp:640:5:640:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:629:13:629:14 | st | st |
|
||||||
| test.cpp:642:5:642:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:629:13:629:14 | st | st |
|
| test.cpp:642:5:642:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:629:13:629:14 | st | st |
|
||||||
|
| test.cpp:718:5:718:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:712:13:712:14 | st | st |
|
||||||
|
| test.cpp:731:5:731:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:725:13:725:14 | st | st |
|
||||||
|
| test.cpp:732:5:732:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:725:13:725:14 | st | st |
|
||||||
|
| test.cpp:733:5:733:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:725:13:725:14 | st | st |
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
| test.cpp:317:2:317:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:309:13:309:14 | st | st |
|
| test.cpp:317:2:317:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:309:13:309:14 | st | st |
|
||||||
| test.cpp:330:2:330:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:322:13:322:14 | st | st |
|
| test.cpp:330:2:330:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:322:13:322:14 | st | st |
|
||||||
| test.cpp:341:2:341:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:333:62:333:63 | st | st |
|
| test.cpp:341:2:341:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:333:62:333:63 | st | st |
|
||||||
|
| test.cpp:720:2:720:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:712:13:712:14 | st | st |
|
||||||
|
| test.cpp:735:2:735:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:725:13:725:14 | st | st |
|
||||||
|
|||||||
@@ -445,7 +445,7 @@ void CorrectPattern_check4()
|
|||||||
if (fixDate(st.wDay, st.wMonth, st.wYear))
|
if (fixDate(st.wDay, st.wMonth, st.wYear))
|
||||||
{
|
{
|
||||||
// move back a day when landing on Feb 29 in an non-leap year
|
// move back a day when landing on Feb 29 in an non-leap year
|
||||||
st.wDay = 28;
|
st.wDay = 28; // GOOD [FALSE POSITIVE]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Safe to use
|
// Safe to use
|
||||||
@@ -680,3 +680,57 @@ void mkDateTest(int year)
|
|||||||
}
|
}
|
||||||
// ...
|
// ...
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void unmodified1()
|
||||||
|
{
|
||||||
|
SYSTEMTIME st;
|
||||||
|
FILETIME ft;
|
||||||
|
WORD w;
|
||||||
|
|
||||||
|
GetSystemTime(&st);
|
||||||
|
|
||||||
|
w = st.wYear;
|
||||||
|
|
||||||
|
SystemTimeToFileTime(&st, &ft); // GOOD - no modification
|
||||||
|
}
|
||||||
|
|
||||||
|
void unmodified2()
|
||||||
|
{
|
||||||
|
SYSTEMTIME st;
|
||||||
|
FILETIME ft;
|
||||||
|
WORD *w_ptr;
|
||||||
|
|
||||||
|
GetSystemTime(&st);
|
||||||
|
|
||||||
|
w_ptr = &(st.wYear);
|
||||||
|
|
||||||
|
SystemTimeToFileTime(&st, &ft); // GOOD - no modification
|
||||||
|
}
|
||||||
|
|
||||||
|
void modified3()
|
||||||
|
{
|
||||||
|
SYSTEMTIME st;
|
||||||
|
FILETIME ft;
|
||||||
|
WORD *w_ptr;
|
||||||
|
|
||||||
|
GetSystemTime(&st);
|
||||||
|
|
||||||
|
st.wYear = st.wYear + 1; // BAD
|
||||||
|
|
||||||
|
SystemTimeToFileTime(&st, &ft);
|
||||||
|
}
|
||||||
|
|
||||||
|
void modified4()
|
||||||
|
{
|
||||||
|
SYSTEMTIME st;
|
||||||
|
FILETIME ft;
|
||||||
|
WORD *w_ptr;
|
||||||
|
|
||||||
|
GetSystemTime(&st);
|
||||||
|
|
||||||
|
st.wYear++; // BAD
|
||||||
|
st.wYear++; // BAD
|
||||||
|
st.wYear++; // BAD
|
||||||
|
|
||||||
|
SystemTimeToFileTime(&st, &ft);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user