Fix rare crash when loading device ID #1137
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Goal
The
DeviceIdStore
can throw anAssertionError
from JsonReader#peek() if the JSON parser state is inconsistent. BecauseDeviceIdStore
only catchesException
, this can result in a crash when initializing Bugsnag.Changeset
Catching
Throwable
rather thanException
fixes the problem.Looking at the implementation of
JsonReader
, it appears that the error can get thrown whenJSONReader's
stack is in an inconsistent state. It's currently unknown what triggers this state.The implementation can't currently recover from this scenario but should be able to do so with this fix. This fix allows the notifier to attempt to persist a new device ID each initialization if one was not present, and in the worst case returns an empty string for device ID.