Post

Replies

Boosts

Views

Activity

RegexBuilder infinite loop when nullable capture starts with NegativeLookahead
In Swift 6.4 or later, a RegexBuilder pattern can hang when an unbounded quantifier repeats a body that can match the empty string, where that body begins with NegativeLookahead. I've opened a corresponding issue and PR to resolve the issue in swift-experimental-string-processing. See below for a reproduction and a workaround. The regression affects apps running on OS 27 built with Xcode 27, which includes Swift 6.4. Running apps built with Xcode 27 on OS 26 or earlier demonstrates the expected behavior. Links: Issue: https://github.com/swiftlang/swift-experimental-string-processing/issues/865 PR: https://github.com/swiftlang/swift-experimental-string-processing/pull/866 FB23419149 and FB23179771 https://forums.swift.org/t/regexbuilder-infinite-loop-when-nullable-capture-starts-with-negativelookahead/87713 Reproduction In the reducer below, matching "A" repeatedly invokes the capture transform with an empty substring without advancing through the input. import RegexBuilder let regex = Regex { ZeroOrMore { Capture { NegativeLookahead { "a" } ZeroOrMore(.digit) } transform: { String($0) } // invoked repeatedly with "" } } _ = "A".matches(of: regex) // never returns Reduced string form: _ = try! Regex(#"(?:(?!a)\d*)*"#).firstMatch(in: "A") // never returns The issue is in the same forward-progress class as PR #851, which skips a nullable quantification's child subtree. Lookaround groups need the same treatment. The regression first appears in Swift 6.4-dev toolchains. I observed the issue in code running on iOS 27 beta 1 (24A5355q), then traced the regression to PR #849 in swift-experimental-string-processing. Workaround In the meantime, wrap the capture contents in Optionally { }: import RegexBuilder let digits = Regex { NegativeLookahead { "a" } ZeroOrMore(.digit) } let regex = Regex { ZeroOrMore { Capture { Optionally { digits } } transform: { String($0) } } } _ = "A".matches(of: regex)
1
1
421
Jun ’26
LLDB RPC server crashes when running top-level async code in Playground files
When running top-level async code in Swift Playgrounds, the LLDB RPC server crashes. For example, when running the following code from Concurrency section of The Swift Programming Language book: func fetchUserID(from server: String) async -> Int { if server == "primary" { return 97 } return 501 } let userIDs = await withTaskGroup(of: Int.self) { group in for server in ["primary", "secondary", "development"] { group.addTask { return await fetchUserID(from: server) } } var results: [Int] = [] for await result in group { results.append(result) } return results } print(userIDs) Xcode reports that the LLDB RPC server has crashed. The Swift Playground app reports “There was a problem running this playground.” However, in the case of the Swift Playground app, results are populated as expected. For example, the console shows “[97, 501, 501]”. Xcode does not print any results in the console. Tested with Xcode 26.4 (17E192) and Swift Playground Version 4.7 (2088). Wrapping the async code in a Task {} resolves the issue. Running this code in a standalone Swift file produces the expected result without an error. FB22416465 From the analytics report, attached in the feedback report, but in case it helps others identify the same issue in their crashes: Triggered by Thread: 26 RPC packet thread for client tid 013af238 (20640312) Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Subtype: KERN_INVALID_ADDRESS at 0x00000000000005a8 Exception Codes: 0x0000000000000001, 0x00000000000005a8 Termination Reason: Namespace SIGNAL, Code 11, Segmentation fault: 11 Terminating Process: exc handler [64943] VM Region Info: 0x5a8 is not in any region. Bytes before following region: 4296211032 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL UNUSED SPACE AT START ---> __TEXT 100130000-1003b8000 [ 2592K] r-x/r-x SM=COW /Applications/Xcode-26.4.0-Release.Candidate.app/Contents/SharedFrameworks/LLDBRPC.framework/Versions/A/Resources/lldb-rpc-server
1
0
826
Apr ’26
RegexBuilder infinite loop when nullable capture starts with NegativeLookahead
In Swift 6.4 or later, a RegexBuilder pattern can hang when an unbounded quantifier repeats a body that can match the empty string, where that body begins with NegativeLookahead. I've opened a corresponding issue and PR to resolve the issue in swift-experimental-string-processing. See below for a reproduction and a workaround. The regression affects apps running on OS 27 built with Xcode 27, which includes Swift 6.4. Running apps built with Xcode 27 on OS 26 or earlier demonstrates the expected behavior. Links: Issue: https://github.com/swiftlang/swift-experimental-string-processing/issues/865 PR: https://github.com/swiftlang/swift-experimental-string-processing/pull/866 FB23419149 and FB23179771 https://forums.swift.org/t/regexbuilder-infinite-loop-when-nullable-capture-starts-with-negativelookahead/87713 Reproduction In the reducer below, matching "A" repeatedly invokes the capture transform with an empty substring without advancing through the input. import RegexBuilder let regex = Regex { ZeroOrMore { Capture { NegativeLookahead { "a" } ZeroOrMore(.digit) } transform: { String($0) } // invoked repeatedly with "" } } _ = "A".matches(of: regex) // never returns Reduced string form: _ = try! Regex(#"(?:(?!a)\d*)*"#).firstMatch(in: "A") // never returns The issue is in the same forward-progress class as PR #851, which skips a nullable quantification's child subtree. Lookaround groups need the same treatment. The regression first appears in Swift 6.4-dev toolchains. I observed the issue in code running on iOS 27 beta 1 (24A5355q), then traced the regression to PR #849 in swift-experimental-string-processing. Workaround In the meantime, wrap the capture contents in Optionally { }: import RegexBuilder let digits = Regex { NegativeLookahead { "a" } ZeroOrMore(.digit) } let regex = Regex { ZeroOrMore { Capture { Optionally { digits } } transform: { String($0) } } } _ = "A".matches(of: regex)
Replies
1
Boosts
1
Views
421
Activity
Jun ’26
LLDB RPC server crashes when running top-level async code in Playground files
When running top-level async code in Swift Playgrounds, the LLDB RPC server crashes. For example, when running the following code from Concurrency section of The Swift Programming Language book: func fetchUserID(from server: String) async -> Int { if server == "primary" { return 97 } return 501 } let userIDs = await withTaskGroup(of: Int.self) { group in for server in ["primary", "secondary", "development"] { group.addTask { return await fetchUserID(from: server) } } var results: [Int] = [] for await result in group { results.append(result) } return results } print(userIDs) Xcode reports that the LLDB RPC server has crashed. The Swift Playground app reports “There was a problem running this playground.” However, in the case of the Swift Playground app, results are populated as expected. For example, the console shows “[97, 501, 501]”. Xcode does not print any results in the console. Tested with Xcode 26.4 (17E192) and Swift Playground Version 4.7 (2088). Wrapping the async code in a Task {} resolves the issue. Running this code in a standalone Swift file produces the expected result without an error. FB22416465 From the analytics report, attached in the feedback report, but in case it helps others identify the same issue in their crashes: Triggered by Thread: 26 RPC packet thread for client tid 013af238 (20640312) Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Subtype: KERN_INVALID_ADDRESS at 0x00000000000005a8 Exception Codes: 0x0000000000000001, 0x00000000000005a8 Termination Reason: Namespace SIGNAL, Code 11, Segmentation fault: 11 Terminating Process: exc handler [64943] VM Region Info: 0x5a8 is not in any region. Bytes before following region: 4296211032 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL UNUSED SPACE AT START ---> __TEXT 100130000-1003b8000 [ 2592K] r-x/r-x SM=COW /Applications/Xcode-26.4.0-Release.Candidate.app/Contents/SharedFrameworks/LLDBRPC.framework/Versions/A/Resources/lldb-rpc-server
Replies
1
Boosts
0
Views
826
Activity
Apr ’26