storage.js: Properly handle invalid values

This commit is contained in:
Johannes Meyer 2019-07-17 11:22:46 +02:00
parent 2280551484
commit c976eb48c9

View File

@ -46,11 +46,24 @@
if (typeof Icinga.Storage.subscribers[event.key] !== 'undefined') { if (typeof Icinga.Storage.subscribers[event.key] !== 'undefined') {
var newValue = null, var newValue = null,
oldValue = null; oldValue = null;
if (event.newValue.length) { if (!! event.newValue) {
newValue = JSON.parse(event.newValue); try {
newValue = JSON.parse(event.newValue);
} catch(error) {
icinga.logger.error('[Storage] Failed to parse new value (\`' + event.newValue
+ '\`) for key "' + event.key + '". Error was: ' + error);
event.storageArea.removeItem(event.key);
return;
}
} }
if (event.oldValue.length) { if (!! event.oldValue) {
oldValue = JSON.parse(event.oldValue); try {
oldValue = JSON.parse(event.oldValue);
} catch(error) {
icinga.logger.warn('[Storage] Failed to parse old value (\`' + event.oldValue
+ '\`) of key "' + event.key + '". Error was: ' + error);
oldValue = null;
}
} }
Icinga.Storage.subscribers[event.key].forEach(function (subscriber) { Icinga.Storage.subscribers[event.key].forEach(function (subscriber) {
@ -108,7 +121,17 @@
* @returns {*} * @returns {*}
*/ */
get: function(key) { get: function(key) {
return JSON.parse(window.localStorage.getItem(this.prefixKey(key))); key = this.prefixKey(key);
var value = window.localStorage.getItem(key);
try {
return JSON.parse(value);
} catch(error) {
icinga.logger.error('[Storage] Failed to parse value (\`' + value
+ '\`) of key "' + key + '". Error was: ' + error);
window.localStorage.removeItem(key);
return null;
}
}, },
/** /**