Skip to content

Commit f5fbf50

Browse files
committed
Ruby: Fix incorrect parsing of ranges
1 parent 89c3d05 commit f5fbf50

File tree

3 files changed

+2
-16
lines changed

3 files changed

+2
-16
lines changed

ruby/ql/lib/codeql/ruby/security/performance/ParseRegExp.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,8 @@ abstract class RegExp extends AST::StringlikeLiteral {
402402
not exists(int x, int y | this.backreference(x, y) and x <= start and y >= end) and
403403
not exists(int x, int y |
404404
this.pStyleNamedCharacterProperty(x, y, _) and x <= start and y >= end
405-
)
405+
) and
406+
not exists(int x, int y | this.multiples(x, y, _, _) and x <= start and y >= end)
406407
}
407408

408409
predicate normalCharacter(int start, int end) {

ruby/ql/test/library-tests/regexp/parse.expected

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,29 +29,21 @@ regexp.rb:
2929
# 9| [RegExpRange] a{4,8}
3030
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
3131

32-
# 9| [RegExpNormalChar] 4,8}
33-
3432
# 10| [RegExpConstant, RegExpNormalChar] a
3533

3634
# 10| [RegExpRange] a{,8}
3735
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
3836

39-
# 10| [RegExpNormalChar] ,8}
40-
4137
# 11| [RegExpConstant, RegExpNormalChar] a
4238

4339
# 11| [InfiniteRepetitionQuantifier, RegExpRange] a{3,}
4440
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
4541

46-
# 11| [RegExpNormalChar] 3,}
47-
4842
# 12| [RegExpConstant, RegExpNormalChar] a
4943

5044
# 12| [RegExpRange] a{7}
5145
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
5246

53-
# 12| [RegExpNormalChar] 7}
54-
5547
# 15| [RegExpConstant, RegExpNormalChar] foo
5648

5749
# 15| [RegExpAlt] foo|bar
@@ -428,8 +420,6 @@ regexp.rb:
428420
# 62| [RegExpRange] \p{^Alnum}{2,3}
429421
#-----| 0 -> [RegExpNamedCharacterProperty] \p{^Alnum}
430422

431-
# 62| [RegExpNormalChar] 2,3}
432-
433423
# 63| [RegExpCharacterClass] [a-f\p{Digit}]
434424
#-----| 0 -> [RegExpCharacterRange] a-f
435425
#-----| 1 -> [RegExpNamedCharacterProperty] \p{Digit}

ruby/ql/test/library-tests/regexp/regexp.expected

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,12 @@ term
2323
| regexp.rb:8:8:8:8 | d | RegExpConstant,RegExpNormalChar |
2424
| regexp.rb:9:2:9:2 | a | RegExpConstant,RegExpNormalChar |
2525
| regexp.rb:9:2:9:7 | a{4,8} | RegExpRange |
26-
| regexp.rb:9:4:9:7 | 4,8} | RegExpNormalChar |
2726
| regexp.rb:10:2:10:2 | a | RegExpConstant,RegExpNormalChar |
2827
| regexp.rb:10:2:10:6 | a{,8} | RegExpRange |
29-
| regexp.rb:10:4:10:6 | ,8} | RegExpNormalChar |
3028
| regexp.rb:11:2:11:2 | a | RegExpConstant,RegExpNormalChar |
3129
| regexp.rb:11:2:11:6 | a{3,} | InfiniteRepetitionQuantifier,RegExpRange |
32-
| regexp.rb:11:4:11:6 | 3,} | RegExpNormalChar |
3330
| regexp.rb:12:2:12:2 | a | RegExpConstant,RegExpNormalChar |
3431
| regexp.rb:12:2:12:5 | a{7} | RegExpRange |
35-
| regexp.rb:12:4:12:5 | 7} | RegExpNormalChar |
3632
| regexp.rb:15:2:15:4 | foo | RegExpConstant,RegExpNormalChar |
3733
| regexp.rb:15:2:15:8 | foo\|bar | RegExpAlt |
3834
| regexp.rb:15:6:15:8 | bar | RegExpConstant,RegExpNormalChar |
@@ -169,7 +165,6 @@ term
169165
| regexp.rb:61:2:61:11 | \\P{Digit}+ | RegExpPlus |
170166
| regexp.rb:62:2:62:11 | \\p{^Alnum} | RegExpNamedCharacterProperty |
171167
| regexp.rb:62:2:62:16 | \\p{^Alnum}{2,3} | RegExpRange |
172-
| regexp.rb:62:13:62:16 | 2,3} | RegExpNormalChar |
173168
| regexp.rb:63:2:63:15 | [a-f\\p{Digit}] | RegExpCharacterClass |
174169
| regexp.rb:63:2:63:16 | [a-f\\p{Digit}]+ | RegExpPlus |
175170
| regexp.rb:63:3:63:3 | a | RegExpConstant,RegExpNormalChar |

0 commit comments

Comments
 (0)