Skip to content

Commit 4475695

Browse files
authored
Fix crash in eidFromURL when arg has no querystr (#25)
Fixes #24
1 parent 10c124a commit 4475695

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

Source/OptableSDK.swift

+7-6
Original file line numberDiff line numberDiff line change
@@ -385,24 +385,25 @@ public class OptableSDK: NSObject {
385385
//
386386
@objc
387387
public func eidFromURL(_ urlString: String) -> String {
388-
let url = URL(string: urlString)
389-
let urlc = URLComponents(url: url!, resolvingAgainstBaseURL: false)
388+
guard let url = URL(string: urlString) else { return "" }
389+
guard let urlc = URLComponents(url: url, resolvingAgainstBaseURL: false) else { return "" }
390+
guard let urlqis = urlc.queryItems else { return "" }
390391

391392
// Look for an oeid parameter in the urlString:
392393
var oeid = ""
393-
for qi: URLQueryItem in (urlc?.queryItems)! {
394-
if qi.value == nil {
394+
for qi: URLQueryItem in urlqis {
395+
guard let val = qi.value else {
395396
continue
396397
}
397398
if qi.name.lowercased() == "oeid" {
398-
oeid = qi.value!
399+
oeid = val
399400
break
400401
}
401402
}
402403

403404
// Check that oeid looks like a valid SHA256:
404405
let range = NSRange(location: 0, length: oeid.utf16.count)
405-
let regex = try! NSRegularExpression(pattern: "[a-f0-9]{64}", options: .caseInsensitive)
406+
guard let regex = try? NSRegularExpression(pattern: "[a-f0-9]{64}", options: .caseInsensitive) else { return "" }
406407
if (oeid.count != 64) || (regex.firstMatch(in: oeid, options: [], range: range) == nil) {
407408
return ""
408409
}

Tests/OptableSDKTests.swift

+15-1
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,27 @@ class OptableSDKTests: XCTestCase {
7171
XCTAssertEqual(expected, sdk.eidFromURL(url))
7272
}
7373

74-
func test_eidFromURL_returnsEmptyWhenOeidAbsent() throws {
74+
func test_eidFromURL_returnsEmptyWhenArgEmpty() throws {
75+
let url = ""
76+
let expected = ""
77+
78+
XCTAssertEqual(expected, sdk.eidFromURL(url))
79+
}
80+
81+
func test_eidFromURL_returnsEmptyWhenOeidAbsentFromQuerystring() throws {
7582
let url = "http://some.domain.com/some/path?some=query&something=else"
7683
let expected = ""
7784

7885
XCTAssertEqual(expected, sdk.eidFromURL(url))
7986
}
8087

88+
func test_eidFromURL_returnsEmptyWhenQuerystringAbsent() throws {
89+
let url = "http://some.domain.com/some/path"
90+
let expected = ""
91+
92+
XCTAssertEqual(expected, sdk.eidFromURL(url))
93+
}
94+
8195
func test_eidFromURL_expectsSHA256() throws {
8296
let url = "http://some.domain.com/some/path?some=query&something=else&oeid=AAAAAAAa665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3&foo=bar&baz"
8397
let expected = ""

0 commit comments

Comments
 (0)