From cb448db3cecd3da168800d41460d706cbfdd9c5f Mon Sep 17 00:00:00 2001 From: Napalys Date: Sun, 2 Mar 2025 16:53:18 +0100 Subject: [PATCH] Exposed flags to the regex parser --- .../src/com/semmle/js/extractor/ASTExtractor.java | 2 +- .../src/com/semmle/js/extractor/RegExpExtractor.java | 8 ++++++-- .../extractor/src/com/semmle/js/parser/RegExpParser.java | 6 ++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java index 0dc00f79ab0..5625a9f1211 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java @@ -600,7 +600,7 @@ public class ASTExtractor { SourceMap sourceMap = SourceMap.legacyWithStartPos( SourceMap.fromString(nd.getRaw()).offsetBy(0, offsets), startPos); - regexpExtractor.extract(source.substring(1, source.lastIndexOf('/')), sourceMap, nd, false); + regexpExtractor.extract(source.substring(1, source.lastIndexOf('/')), sourceMap, nd, false, source.substring(source.lastIndexOf('/'), source.length())); } else if (nd.isStringLiteral() && !c.isInsideType() && nd.getRaw().length() < 1000 diff --git a/javascript/extractor/src/com/semmle/js/extractor/RegExpExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/RegExpExtractor.java index 41d7d446cfe..5c02a4e9935 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/RegExpExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/RegExpExtractor.java @@ -346,8 +346,8 @@ public class RegExpExtractor { } } - public void extract(String src, SourceMap sourceMap, Node parent, boolean isSpeculativeParsing) { - Result res = parser.parse(src); + public void extract(String src, SourceMap sourceMap, Node parent, boolean isSpeculativeParsing, String flags) { + Result res = parser.parse(src, flags); if (isSpeculativeParsing && res.getErrors().size() > 0) { return; } @@ -364,4 +364,8 @@ public class RegExpExtractor { this.emitLocation(err, lbl); } } + + public void extract(String src, SourceMap sourceMap, Node parent, boolean isSpeculativeParsing) { + extract(src, sourceMap, parent, isSpeculativeParsing, ""); + } } diff --git a/javascript/extractor/src/com/semmle/js/parser/RegExpParser.java b/javascript/extractor/src/com/semmle/js/parser/RegExpParser.java index 5b2177f3fff..bc39ff31316 100644 --- a/javascript/extractor/src/com/semmle/js/parser/RegExpParser.java +++ b/javascript/extractor/src/com/semmle/js/parser/RegExpParser.java @@ -67,6 +67,7 @@ public class RegExpParser { private List errors; private List backrefs; private int maxbackref; + private String flags; /** Parse the given string as a regular expression. */ public Result parse(String src) { @@ -82,6 +83,11 @@ public class RegExpParser { return new Result(root, errors); } + public Result parse(String src, String flags) { + this.flags = flags; + return parse(src); + } + private static String fromCodePoint(int codepoint) { if (Character.isValidCodePoint(codepoint)) return new String(Character.toChars(codepoint)); // replacement character