Fixes #618 - adds less restricitve function validation.
authorJakub Pawlowicz <contact@jakubpawlowicz.com>
Sun, 16 Aug 2015 15:35:55 +0000 (16:35 +0100)
committerJakub Pawlowicz <contact@jakubpawlowicz.com>
Sun, 16 Aug 2015 15:37:13 +0000 (16:37 +0100)
To support various functions which may allow URLs inside them, like
`image-src()` we need a less restrictve validation regex.

History.md
lib/properties/validator.js
test/integration-test.js

index 67a594d..25c3c37 100644 (file)
@@ -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.
index 343bc2a..346a36a 100644 (file)
@@ -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 + ')';
index 5836842..ddad7ee 100644 (file)
@@ -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)}'
       ]
     })
   )