Skip to content

Commit db817c3

Browse files
authored
Merge pull request #20 from browserstack/fix/DEVA11Y-480-sanitize-version-string
fix(security): sanitize version string to prevent path traversal [DEVA11Y-480]
2 parents 576f0d5 + 788b38e commit db817c3

1 file changed

Lines changed: 7 additions & 2 deletions

File tree

Plugins/BrowserStackAccessibilityLint/BrowserStackAccessibilityLint.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -560,8 +560,13 @@ private func hardwareIdentifier() throws -> String {
560560
private func extractVersion(from url: URL) -> String? {
561561
let filename = url.deletingPathExtension().lastPathComponent
562562
if let range = filename.range(of: "-", options: .backwards) {
563-
let version = filename[range.upperBound...]
564-
return version.isEmpty ? nil : String(version)
563+
let version = String(filename[range.upperBound...])
564+
if version.isEmpty { return nil }
565+
// Reject path traversal and non-semver characters
566+
let allowed = CharacterSet.alphanumerics.union(CharacterSet(charactersIn: ".-+"))
567+
guard version.unicodeScalars.allSatisfy({ allowed.contains($0) }) else { return nil }
568+
guard !version.contains("..") else { return nil }
569+
return version
565570
}
566571
return nil
567572
}

0 commit comments

Comments
 (0)