Skip to content

Diff-informed queries via primary/secondary abstractions #19586

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

jbj
Copy link
Contributor

@jbj jbj commented May 27, 2025

This PR is a proof of concept for how diff-informed queries could be made more high level, reducing hard-to-remember design patterns and simultaneously reducing reverse dependencies and the "module soup" I proposed in #17846.

I've only implemented what's necessary for XSS.ql so far since I expect a lot of changes to names and APIs.

jbj added 4 commits May 27, 2025 08:44
I haven't figured out how to avoid the redundancy between
`getASelected{Source,Sink}Location` in the module and the class. Maybe
we need a strong notion of primary and secondary data-flow
configurations.
For now I've only implemented what XSS.qll needs
@@ -15,6 +15,16 @@
import semmle.code.java.security.XssQuery
import XssFlow::PathGraph

class IsDiffInformed extends DataFlow::DiffInformedQuery {
// This predicate is overridden to be more precise than the default
// implementation in order to support secondary secondary data-flow

Check warning

Code scanning / CodeQL

Comment has repeated word Warning

The comment repeats secondary.
@@ -742,6 +746,33 @@
import Flow
}

module Primary<ConfigSig Config> implements GlobalFlowSig {
private module Config0 implements FullStateConfigSig {

Check warning

Code scanning / CodeQL

Data flow configuration module naming Warning

Modules implementing a data flow configuration should end in Config.
}
}

private module C implements FullStateConfigSig {

Check warning

Code scanning / CodeQL

Data flow configuration module naming Warning

Modules implementing a data flow configuration should end in Config.
}
}

private module C implements DataFlowInternal::FullStateConfigSig {

Check warning

Code scanning / CodeQL

Data flow configuration module naming Warning

Modules implementing a data flow configuration should end in Config.
module FindSinks<DataFlow::ConfigSig Config, DataFlow::SecondaryConfig SC> implements
DataFlow::GlobalFlowSig
{
private module Config0 implements DataFlowInternal::FullStateConfigSig {

Check warning

Code scanning / CodeQL

Data flow configuration module naming Warning

Modules implementing a data flow configuration should end in Config.
}
}

private module C implements DataFlowInternal::FullStateConfigSig {

Check warning

Code scanning / CodeQL

Data flow configuration module naming Warning

Modules implementing a data flow configuration should end in Config.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant