Prevent notifications from crashing on malformed preference data #16326
+468
−6
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.
Summary
Fixes #15281
Notification system crashes with
TypeError: Cannot read properties of undefined (reading 'asCookie')when marking notifications as read/unread if the preference property is malformed (e.g., string instead of{ key, value }object).Occurred changes and/or fixed issues
Added defensive validation in
shell/store/notifications.ts:isValidPreference()type guard validates preference structure before usemarkRead,markUnread,markAllReadactions now validate preferences and log errors instead of crashingTechnical notes summary
The crash occurred because
prefs/setexpects{ key, value }format. When preference is malformed:keybecomes undefineddefinitionlookup in prefs store fails (returns undefined)definition.asCookiethrows TypeErrorValidation checks:
Protects against: strings, arrays, nulls, objects with missing/wrong-type properties.
Areas or cases that should be tested
Areas which could experience regressions
Screenshot/Video
Error before fix:

After fix: Application continues running, error logged to console for debugging.
Checklist
Admin,Standard UserandUser BaseWarning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
download.cypress.io/usr/local/bin/node /usr/local/bin/node index.js --exec install(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.