Skip to content

Commit 6340818

Browse files
Merge pull request #599 from rctcwyvrn/5.7-fuzzing-is-cool
[5.7] Backreferences do not guarantee forward progress
2 parents c5212e0 + 9e21dcd commit 6340818

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

Sources/_StringProcessing/ByteCodeGen.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,8 @@ extension DSLTree.Node {
10611061
case .atom(let atom):
10621062
switch atom {
10631063
case .changeMatchingOptions, .assertion: return false
1064+
// Captures may be nil so backreferences may be zero length matches
1065+
case .backreference: return false
10641066
default: return true
10651067
}
10661068
case .trivia, .empty:

Tests/RegexTests/MatchTests.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2537,4 +2537,8 @@ extension RegexTests {
25372537
expectCompletion(regex: #"(a{,4})*"#, in: "aa")
25382538
expectCompletion(regex: #"((|)+)*"#, in: "aa")
25392539
}
2540+
2541+
func testFuzzerArtifacts() throws {
2542+
expectCompletion(regex: #"(b?)\1*"#, in: "a")
2543+
}
25402544
}

0 commit comments

Comments
 (0)