Skip to content

Conversation

@bdrodes
Copy link

@bdrodes bdrodes commented Jan 15, 2026

False positive clean up for cpp/microsoft/public/leap-year/unchecked-after-arithmetic-year-modification.

ropwareJB and others added 30 commits December 18, 2025 12:30
…to a more precise ignorable operation analysis. Ignorable operations that flow to a possible source also invalidate that source. Also added a root source finder to get the earliest source if many exist. Modified the leap year checker finder to use a new dataflow mechanic that flows from a YearFieldAccess.
… constant being a literal, but a known value variable or literal.
… ignore certain opeartions. Also added an ignorable function class to be used to ignore operation sources.
…ure they are actually necessary or providing much utility.
…iewing the unit tests and conversations about how to handle some of the fp/fn cases observed. Updated the unit tests to use InlineExpectationsTestQuery.ql so it is easier to detect FP/FNs.
…eds to be generally reassessed but recent test changes alter the expected results.
…se positive we currently do not have a solution for, marked as SPURIOUS.
… for handing mktime and other variants that convert the time automatically without the need for a check if the date is an incorrect leap year date.
bdrodes and others added 3 commits January 30, 2026 15:51
…ification.ql

Co-authored-by: Josh Brown <jb1@microsoft.com>
…ification.ql

Co-authored-by: Josh Brown <jb1@microsoft.com>
…ification.ql

Co-authored-by: Josh Brown <jb1@microsoft.com>
Copy link
Collaborator

@MathiasVP MathiasVP left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lots of comments! I've tried to anticipate some of the things that GitHub would probably like to see fixed. I'm sure they will have other comments, but this should at least shave off the first round of review comments 😄

Comment on lines 98 to 118

/**
* A `DayFieldAccess` for the `TIME_FIELDS` struct.
*/
class TimeFieldsDayFieldAccess extends DayFieldAccess {
TimeFieldsDayFieldAccess() { this.getTarget().getName() = "Day" }
}

/**
* A `MonthFieldAccess` for the `TIME_FIELDS` struct.
*/
class TimeFieldsMonthFieldAccess extends MonthFieldAccess {
TimeFieldsMonthFieldAccess() { this.getTarget().getName() = "Month" }
}

/**
* A `YearFieldAccess` for the `TIME_FIELDS` struct.
*/
class TimeFieldsYearFieldAccess extends YearFieldAccess {
TimeFieldsYearFieldAccess() { this.getTarget().getName() = "Year" }
} No newline at end of file
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ideally these should all be private, but I see that the old StructTmYearFieldAccess and friends also aren't private so 🤷

Should we also check for the declaring types here? i.e., add something like:

this.getTarget().getDeclaringType().hasGlobalName("_TIME_FIELDS")?

(note the underscore in front)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm trying to match the existing approach here, and none of the others do this, so I'm inclined to leave it and such a change should be a separate PR.

bdrodes and others added 9 commits February 6, 2026 12:45
…ification.ql

Co-authored-by: Mathias Vorreiter Pedersen <mathiasvp@github.com>
Co-authored-by: Mathias Vorreiter Pedersen <mathiasvp@github.com>
…ification.ql

Co-authored-by: Mathias Vorreiter Pedersen <mathiasvp@github.com>
…ification.ql

Co-authored-by: Mathias Vorreiter Pedersen <mathiasvp@github.com>
…ification.ql

Co-authored-by: Mathias Vorreiter Pedersen <mathiasvp@github.com>
…utoLeapYearCorrecting. Updating expected results.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants