From 5c9feba21a3823fa73fa8f19f75064044a2f1fc4 Mon Sep 17 00:00:00 2001 From: wearrrrr Date: Tue, 25 Jul 2023 15:01:34 -0500 Subject: [PATCH] Added JSON Validation to prevent errors from incorrectly hosted JSON. --- dist/templateManager.user.js | 13 +++++++++++++ package-lock.json | 4 ++-- src/templateManager.ts | 13 +++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/dist/templateManager.user.js b/dist/templateManager.user.js index 378559b..1f5fc2d 100644 --- a/dist/templateManager.user.js +++ b/dist/templateManager.user.js @@ -847,6 +847,15 @@ getCacheBustString() { return Math.floor(Date.now() / CACHE_BUST_PERIOD).toString(36); } + validateJSON(str) { + try { + JSON.parse(str); + return true; + } + catch (_a) { + return false; + } + } loadTemplatesFromJsonURL(url, minPriority = 0, lastContact = '') { let _url = new URL(url); let uniqueString = `${_url.origin}${_url.pathname}`; @@ -870,6 +879,10 @@ this.responseDiffs.push(responseTime - Date.now()); } // parse the response + if (this.validateJSON(response.responseText) === false) { + console.error(`Invalid JSON from ${_url}`); + return; + } let json = JSON.parse(response.responseText); // read blacklist. These will never be loaded if (json.blacklist) { diff --git a/package-lock.json b/package-lock.json index c310a93..475cf06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "template-manager", - "version": "0.6.2", + "version": "0.6.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "template-manager", - "version": "0.6.2", + "version": "0.6.4", "license": "MIT", "dependencies": { "@types/greasemonkey": "^4.0.4" diff --git a/src/templateManager.ts b/src/templateManager.ts index f4a3067..560023f 100644 --- a/src/templateManager.ts +++ b/src/templateManager.ts @@ -115,6 +115,15 @@ export class TemplateManager { return Math.floor(Date.now() / CACHE_BUST_PERIOD).toString(36) } + validateJSON(str: string) { + try { + JSON.parse(str); + return true; + } catch { + return false; + } + } + loadTemplatesFromJsonURL(url: string | URL, minPriority = 0, lastContact = '') { let _url = new URL(url); let uniqueString = `${_url.origin}${_url.pathname}`; @@ -141,6 +150,10 @@ export class TemplateManager { this.responseDiffs.push(responseTime - Date.now()); } // parse the response + if (this.validateJSON(response.responseText) === false) { + console.error(`Invalid JSON from ${_url}`); + return; + } let json: JsonParams = JSON.parse(response.responseText); // read blacklist. These will never be loaded if (json.blacklist) {