Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ignore un-deserializable tokens in allPersistentTokens() #179

Merged
merged 2 commits into from
Apr 29, 2018
Merged

Conversation

mattrubin
Copy link
Owner

A recent change to the behavior of allPersistentTokens() caused any individual persistent token which failed deserialization to cause the entire fetch to fail. Previously, individual tokens failing deserialization would be ignored, and the method would return as many readable tokens as possible.

That change has been the cause of a crash on launch for many users of Authenticator. This PR reverts the behavior change until the cause of the underlying deserialization failures can be understood, and a recovery path provided.

@@ -281,7 +284,8 @@ class KeychainTests: XCTestCase {
let persistentRef = try addKeychainItem(withAttributes: keychainAttributes)

XCTAssertThrowsError(try keychain.persistentToken(withIdentifier: persistentRef))
XCTAssertThrowsError(try keychain.allPersistentTokens())
// TODO: Restore deserialization error handling in allPersistentTokens()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Todo Violation: TODOs should be resolved (Restore deserialization error ...). (todo)

@@ -264,7 +266,8 @@ class KeychainTests: XCTestCase {
let persistentRef = try addKeychainItem(withAttributes: keychainAttributes)

XCTAssertThrowsError(try keychain.persistentToken(withIdentifier: persistentRef))
XCTAssertThrowsError(try keychain.allPersistentTokens())
// TODO: Restore deserialization error handling in allPersistentTokens()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Todo Violation: TODOs should be resolved (Restore deserialization error ...). (todo)

@@ -247,7 +248,8 @@ class KeychainTests: XCTestCase {
let persistentRef = try addKeychainItem(withAttributes: keychainAttributes)

XCTAssertThrowsError(try keychain.persistentToken(withIdentifier: persistentRef))
XCTAssertThrowsError(try keychain.allPersistentTokens())
// TODO: Restore deserialization error handling in allPersistentTokens()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Todo Violation: TODOs should be resolved (Restore deserialization error ...). (todo)

@@ -231,7 +231,8 @@ class KeychainTests: XCTestCase {
let persistentRef = try addKeychainItem(withAttributes: keychainAttributes)

XCTAssertThrowsError(try keychain.persistentToken(withIdentifier: persistentRef))
XCTAssertThrowsError(try keychain.allPersistentTokens())
// TODO: Restore deserialization error handling in allPersistentTokens()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Todo Violation: TODOs should be resolved (Restore deserialization error ...). (todo)

// tokens as possible.
// TODO: Restore deserialization error handling, in a way that provides info on the failure reason and allows
// the caller to choose whether to fail completely or recover some data.
return Set(allItems.flatMap({ try? PersistentToken.init(keychainDictionary:$0) }))

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Explicit Init Violation: Explicitly calling .init() should be avoided. (explicit_init)

let allItems = try allKeychainItems()
// This code intentionally ignores items which fail deserialization, instead opting to return as many readable
// tokens as possible.
// TODO: Restore deserialization error handling, in a way that provides info on the failure reason and allows

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Todo Violation: TODOs should be resolved (Restore deserialization error ...). (todo)

@mattrubin mattrubin added this to the 3.1.3 milestone Apr 29, 2018
@codecov
Copy link

codecov bot commented Apr 29, 2018

Codecov Report

Merging #179 into develop will increase coverage by 0.03%.
The diff coverage is 100%.

Impacted file tree graph

@@             Coverage Diff             @@
##           develop     #179      +/-   ##
===========================================
+ Coverage    97.19%   97.22%   +0.03%     
===========================================
  Files            6        6              
  Lines          392      397       +5     
===========================================
+ Hits           381      386       +5     
  Misses          11       11
Impacted Files Coverage Δ
Sources/Keychain.swift 92.56% <100%> (+0.32%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 2c091c8...c14a295. Read the comment docs.

@mattrubin mattrubin merged commit 065540d into develop Apr 29, 2018
@mattrubin mattrubin deleted the hotfix branch April 29, 2018 15:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants