-
Notifications
You must be signed in to change notification settings - Fork 1.6k
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
JS: RegExp unknown flags support and enhanced compatibility with RegExp objects #18089
base: main
Are you sure you want to change the base?
Conversation
javascript/ql/src/Security/CWE-178/CaseSensitiveMiddlewarePath.ql
Outdated
Show resolved
Hide resolved
Co-authored-by: Erik Krogh Kristensen <[email protected]>
e314fef
to
b39a8fe
Compare
/** | ||
* Holds if this is a global replacement, that is, the first argument is a regular expression | ||
* with the `g` flag, or this is a call to `.replaceAll()`. | ||
*/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This docstring needs to mention that the predicate also holds if the flags are unknown.
Incorporate that into the string naturally in some way.
(Actually, try to copy-paste the above sentence into Copilot as instructions, use o1-mini
or o1-preview
with the Copilot edit mode: Select the docstring in VSCode, press cmd + i
, make sure to select the right model, and paste my above instructions).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed 56cde75
/** Holds if the constructed predicate has the `g` flag. */ | ||
predicate isGlobal() { RegExp::isGlobal(this.getFlags()) } | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't outright delete predicates like this. Instead keep the implementation but add a deprecated
annotation, and add an explanation into the docstring as to why a predicate is deprecated.
Deprecated predicates gets deleted after a little over a year.
59c78b0
to
7d2b6c9
Compare
…gExp with global flag
…protytpe pulluting
…ks only with literals
…gives wrong results
…erals but not objects
…assword Clear text storage of sensitive information
…arEscapeSanitizer
2970aad
to
98a459f
Compare
98a459f
to
fd77360
Compare
.../ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteSanitization.expected
Outdated
Show resolved
Hide resolved
javascript/ql/lib/semmle/javascript/security/dataflow/CleartextLoggingCustomizations.qll
Outdated
Show resolved
Hide resolved
--- | ||
category: majorAnalysis | ||
--- | ||
* Queries such as `IncompleteSanitization`, `TaintedPathCustomizations`, and `IncompleteBlacklistSanitizer` are now compatible with both `RegExpLiteral` and `RegExpObject`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe focus more on the change that users will actually see.
The change they'll see is that the queries now flag new RegExp
objects, and not just regex literals.
Same with the below.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed d2de9a2 ?
Co-authored-by: erik-krogh <[email protected]>
051ff39
to
9ca0fe4
Compare
javascript/ql/lib/change-notes/2024-11-28-regexp-unknown-flags.md
Outdated
Show resolved
Hide resolved
Co-authored-by: Erik Krogh Kristensen <[email protected]>
.../ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteSanitization.expected
Outdated
Show resolved
Hide resolved
…for new RegExp objects
26c625e
to
3171f38
Compare
Co-authored-by: asgerf <[email protected]>
This pull request fixes an issue where queries were only handling regular expressions with known flags, overlooking unknown flags. Now, it correctly deals with unknown flags in regular expressions.
Additionally, some queries in the
JavaScript
code were only working with literal regular expressions. Now, they work with both literals and RegExp objects. Notable updates include:javascript/ql/lib/semmle/javascript/security/IncompleteBlacklistSanitizer.qll
javascript/ql/lib/semmle/javascript/security/dataflow/TaintedPathCustomizations.qll
javascript/ql/src/Security/CWE-116/IncompleteSanitization.ql