Skip to content

Commit 47b5165

Browse files
authored
Merge pull request github#6653 from smowton/smowton/admin/javascript-unpaired-surrogate-test
Java and JS: Add/adapt tests for literals with an unpaired surrogate character
2 parents 3404bcf + abdd3a5 commit 47b5165

File tree

6 files changed

+21
-14
lines changed

6 files changed

+21
-14
lines changed

java/ql/test/library-tests/literals/literalString.expected

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@
1515
| literals/Literals.java:130:3:130:13 | "\\u1234567" | \u1234567 | \u1234567 |
1616
| literals/Literals.java:131:3:131:18 | "\\uaBcDeF\\u0aB1" | \uabcdeF\u0ab1 | \uabcdeF\u0ab1 |
1717
| literals/Literals.java:132:3:132:16 | "\\uD800\\uDC00" | \ud800\udc00 | \ud800\udc00 |
18-
| literals/Literals.java:134:3:134:10 | "\\uD800" | ? | ? |
19-
| literals/Literals.java:135:3:135:10 | "\\uDC00" | ? | ? |
20-
| literals/Literals.java:136:3:136:31 | "hello\\uD800hello\\uDC00world" | hello?hello?world | hello?hello?world |
18+
| literals/Literals.java:134:3:134:10 | "\\uD800" | \ufffd | \ufffd |
19+
| literals/Literals.java:135:3:135:10 | "\\uDC00" | \ufffd | \ufffd |
20+
| literals/Literals.java:136:3:136:31 | "hello\\uD800hello\\uDC00world" | hello\ufffdhello\ufffdworld | hello\ufffdhello\ufffdworld |

javascript/ql/lib/semmle/javascript/Regexp.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,8 +258,8 @@ class RegExpConstant extends RegExpTerm, @regexp_constant {
258258
class RegExpCharEscape extends RegExpEscape, RegExpConstant, @regexp_char_escape {
259259
override predicate isCharacter() {
260260
not (
261-
// unencodable characters are represented as '?' in the database
262-
getValue() = "?" and
261+
// unencodable characters are represented as '?' or \uFFFD in the database
262+
getValue() = ["?", 65533.toUnicode()] and
263263
exists(string s | s = toString().toLowerCase() |
264264
// only Unicode escapes give rise to unencodable characters
265265
s.matches("\\\\u%") and
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| test.js:1:9:1:16 | "\\ud800" | \ufffd | "\\ud800" | \ufffd | test.js:1:9:1:16 | "\\ud800" |
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
let s = "\ud800";
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import javascript
2+
3+
from StringLiteral sl
4+
where sl.getFile().getBaseName() = "test.js"
5+
select sl, sl.getValue(), sl.getRawValue(), sl.getStringValue(), sl.getUnderlyingValue()

javascript/ql/test/query-tests/Performance/ReDoS/tst.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -304,10 +304,10 @@ var bad66 = /^ab(c+)+$/;
304304
// NOT GOOD
305305
var bad67 = /(\d(\s+)*){20}/;
306306

307-
// GOOD - but we spuriously conclude that a rejecting suffix exists.
307+
// GOOD - but we spuriously conclude that a rejecting suffix exists.
308308
var good36 = /(([^/]|X)+)(\/[^]*)*$/;
309309

310-
// GOOD - but we spuriously conclude that a rejecting suffix exists.
310+
// GOOD - but we spuriously conclude that a rejecting suffix exists.
311311
var good37 = /^((x([^Y]+)?)*(Y|$))/;
312312

313313
// NOT GOOD
@@ -331,7 +331,7 @@ var bad72 = /(c?a?)*b/;
331331
// NOT GOOD
332332
var bad73 = /(?:a|a?)+b/;
333333

334-
// NOT GOOD - but not detected.
334+
// NOT GOOD - but not detected.
335335
var bad74 = /(a?b?)*$/;
336336

337337
// NOT GOOD
@@ -357,13 +357,13 @@ var good40 = /(a|b)+/;
357357
var good41 = /(?:[\s;,"'<>(){}|[\]@=+*]|:(?![/\\]))+/;
358358

359359
// NOT GOOD
360-
var bad83 = /^((?:a{|-)|\w\{)+X$/;
361-
var bad84 = /^((?:a{0|-)|\w\{\d)+X$/;
362-
var bad85 = /^((?:a{0,|-)|\w\{\d,)+X$/;
363-
var bad86 = /^((?:a{0,2|-)|\w\{\d,\d)+X$/;
360+
var bad83 = /^((?:a{|-)|\w\{)+X$/;
361+
var bad84 = /^((?:a{0|-)|\w\{\d)+X$/;
362+
var bad85 = /^((?:a{0,|-)|\w\{\d,)+X$/;
363+
var bad86 = /^((?:a{0,2|-)|\w\{\d,\d)+X$/;
364364

365-
// GOOD:
366-
var good42 = /^((?:a{0,2}|-)|\w\{\d,\d\})+X$/;
365+
// GOOD:
366+
var good42 = /^((?:a{0,2}|-)|\w\{\d,\d\})+X$/;
367367

368368
// GOOD
369369
var good43 = /("[^"]*?"|[^"\s]+)+(?=\s*|\s*$)/g;

0 commit comments

Comments
 (0)