Merge pull request #1867 from geoffw0/erafix9

CPP: Add date to JapaneseEraDate.ql
This commit is contained in:
Jonas Jensen
2019-09-04 13:16:04 +02:00
committed by GitHub
5 changed files with 30 additions and 7 deletions

View File

@@ -36,11 +36,22 @@ predicate assignedDay(Struct s, DayFieldAccess day, int value) {
)
}
predicate eraDate(int year, int month, int day) {
year = 1989 and month = 1 and day = 8
or
year = 2019 and month = 5 and day = 1
}
predicate badStructInitialization(Element target, string message) {
exists(StructLikeClass s, YearFieldAccess year, MonthFieldAccess month, DayFieldAccess day |
assignedYear(s, year, 1989) and
assignedMonth(s, month, 1) and
assignedDay(s, day, 8) and
exists(
StructLikeClass s, YearFieldAccess year, MonthFieldAccess month, DayFieldAccess day,
int yearValue, int monthValue, int dayValue
|
eraDate(yearValue, monthValue, dayValue) and
assignedYear(s, year, yearValue) and
assignedMonth(s, month, monthValue) and
assignedDay(s, day, dayValue) and
target = year and
message = "A time struct that is initialized with exact Japanese calendar era start date."
)
@@ -48,9 +59,8 @@ predicate badStructInitialization(Element target, string message) {
predicate badCall(Element target, string message) {
exists(Call cc, int i |
cc.getArgument(i).getValue().toInt() = 1989 and
cc.getArgument(i + 1).getValue().toInt() = 1 and
cc.getArgument(i + 2).getValue().toInt() = 8 and
eraDate(cc.getArgument(i).getValue().toInt(), cc.getArgument(i + 1).getValue().toInt(),
cc.getArgument(i + 2).getValue().toInt()) and
target = cc and
message = "Call that appears to have hard-coded Japanese era start date as parameter."
)