From: Jakub Pawlowicz Date: Sun, 16 Aug 2015 15:35:55 +0000 (+0100) Subject: Fixes #618 - adds less restricitve function validation. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=81b9f27be81494d15fcbba89b248992dd0aa1aba;p=clean-css.git Fixes #618 - adds less restricitve function validation. To support various functions which may allow URLs inside them, like `image-src()` we need a less restrictve validation regex. --- diff --git a/History.md b/History.md index 67a594d4..25c3c37e 100644 --- a/History.md +++ b/History.md @@ -6,6 +6,7 @@ * Unifies wrappers for simple & advanced optimizations. * Fixed issue [#599](https://github.com/jakubpawlowicz/clean-css/issues/599) - support for inlined source maps. * Fixed issue [#612](https://github.com/jakubpawlowicz/clean-css/issues/612) - adds HTTP proxy support. +* Fixed issue [#618](https://github.com/jakubpawlowicz/clean-css/issues/618) - adds safer function validation. * Fixed issue [#625](https://github.com/jakubpawlowicz/clean-css/issues/625) - adds length unit optimizations. * Fixed issue [#644](https://github.com/jakubpawlowicz/clean-css/issues/644) - adds time unit optimizations. * Fixed issue [#645](https://github.com/jakubpawlowicz/clean-css/issues/645) - adds bottom to top `media` merging. diff --git a/lib/properties/validator.js b/lib/properties/validator.js index 343bc2aa..346a36aa 100644 --- a/lib/properties/validator.js +++ b/lib/properties/validator.js @@ -6,8 +6,8 @@ var widthKeywords = ['thin', 'thick', 'medium', 'inherit', 'initial']; var allUnits = ['px', '%', 'em', 'in', 'cm', 'mm', 'ex', 'pt', 'pc', 'ch', 'rem', 'vh', 'vm', 'vmin', 'vmax', 'vw']; var cssUnitRegexStr = '(\\-?\\.?\\d+\\.?\\d*(' + allUnits.join('|') + '|)|auto|inherit)'; var cssCalcRegexStr = '(\\-moz\\-|\\-webkit\\-)?calc\\([^\\)]+\\)'; -var cssFunctionNoVendorRegexStr = '[A-Z]+(\\-|[A-Z]|[0-9])+\\(([A-Z]|[0-9]|\\ |\\,|\\#|\\+|\\-|\\%|\\.|\\(|\\))*\\)'; -var cssFunctionVendorRegexStr = '\\-(\\-|[A-Z]|[0-9])+\\(([A-Z]|[0-9]|\\ |\\,|\\#|\\+|\\-|\\%|\\.|\\(|\\))*\\)'; +var cssFunctionNoVendorRegexStr = '[A-Z]+(\\-|[A-Z]|[0-9])+\\(.*?\\)'; +var cssFunctionVendorRegexStr = '\\-(\\-|[A-Z]|[0-9])+\\(.*?\\)'; var cssVariableRegexStr = 'var\\(\\-\\-[^\\)]+\\)'; var cssFunctionAnyRegexStr = '(' + cssVariableRegexStr + '|' + cssFunctionNoVendorRegexStr + '|' + cssFunctionVendorRegexStr + ')'; var cssUnitOrCalcRegexStr = '(' + cssUnitRegexStr + '|' + cssCalcRegexStr + ')'; diff --git a/test/integration-test.js b/test/integration-test.js index 58368423..ddad7eeb 100644 --- a/test/integration-test.js +++ b/test/integration-test.js @@ -1306,6 +1306,10 @@ vows.describe('integration tests') 'uppercase': [ 'a{background-image: URL("images/image.png");}', 'a{background-image:url(images/image.png)}' + ], + 'image-set': [ + 'a{background:url(one.png);background:-webkit-image-set(url(one.png) 1x,url(two.png) 2x)}', + 'a{background:url(one.png);background:-webkit-image-set(url(one.png) 1x,url(two.png) 2x)}' ] }) )