Prevent importing styles with no section. Fixes #687 (#697)

* Prevent importing styles with no section. Fixes #687

And prevent issues with existing styles with no section

* Revert sections checks for empty array

* Add styleJSONseemsValid function

* Clean up

* Fix eslint nags
This commit is contained in:
Rob Garrison 2019-04-16 07:32:06 -05:00 committed by GitHub
parent b48817fe01
commit 8906cbbb1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 16 deletions

View File

@ -1,6 +1,6 @@
/* global styleSectionsEqual prefs download tryJSONparse ignoreChromeError
calcStyleDigest getStyleWithNoCode debounce chromeLocal
usercss semverCompare
usercss semverCompare styleJSONseemsValid
API_METHODS styleManager */
'use strict';
@ -231,14 +231,6 @@
API_METHODS[json.usercssData ? 'installUsercss' : 'installStyle'](newStyle) :
newStyle;
}
function styleJSONseemsValid(json) {
return json
&& json.sections
&& json.sections.length
&& typeof json.sections.every === 'function'
&& typeof json.sections[0].code === 'string';
}
}
function schedule() {

View File

@ -1,4 +1,4 @@
/* exported styleSectionsEqual styleCodeEmpty calcStyleDigest */
/* exported styleSectionsEqual styleCodeEmpty calcStyleDigest styleJSONseemsValid */
'use strict';
function styleCodeEmpty(code) {
@ -96,3 +96,14 @@ function calcStyleDigest(style) {
return parts.join('');
}
}
function styleJSONseemsValid(json) {
return json
&& json.name
&& json.name.trim()
&& Array.isArray(json.sections)
&& json.sections
&& json.sections.length
&& typeof json.sections.every === 'function'
&& typeof json.sections[0].code === 'string';
}

View File

@ -1,5 +1,6 @@
/* global messageBox styleSectionsEqual getOwnTab API onDOMready
tryJSONparse scrollElementIntoView $ $$ API $create t animateElement */
tryJSONparse scrollElementIntoView $ $$ API $create t animateElement
styleJSONseemsValid */
'use strict';
const STYLISH_DUMP_FILE_EXT = '.txt';
@ -144,11 +145,7 @@ function importFromString(jsonString) {
.then(done);
function analyze(item, index) {
if (typeof item !== 'object' ||
!item ||
!item.name ||
!item.name.trim() ||
(item.sections && !Array.isArray(item.sections))) {
if (typeof item !== 'object' || !styleJSONseemsValid(item)) {
stats.invalid.names.push(`#${index}: ${limitString(item && item.name || '')}`);
return;
}