Fixes #763 - data URI SVG and quoting.
authorJakub Pawlowicz <contact@jakubpawlowicz.com>
Mon, 30 May 2016 05:21:53 +0000 (07:21 +0200)
committerJakub Pawlowicz <contact@jakubpawlowicz.com>
Tue, 31 May 2016 08:47:41 +0000 (10:47 +0200)
Quotes inside data URI SVG can be unescaped and we should handle
such cases correctly by leaving quoting in place.

History.md
lib/text/urls-processor.js
test/integration-test.js

index 0cd9248..ed84170 100644 (file)
@@ -7,6 +7,7 @@
 ==================
 
 * Fixed issue [#751](https://github.com/jakubpawlowicz/clean-css/issues/751) - stringifying CSS variables.
+* Fixed issue [#763](https://github.com/jakubpawlowicz/clean-css/issues/763) - data URI SVG and quoting.
 
 [3.4.13 / 2016-05-23](https://github.com/jakubpawlowicz/clean-css/compare/v3.4.12...v3.4.13)
 ==================
index 7e4a530..4dbb55a 100644 (file)
@@ -42,6 +42,9 @@ function normalize(url, keepUrlQuotes) {
     .replace(/^url\((['"])? /, 'url($1')
     .replace(/ (['"])?\)$/, '$1)');
 
+  if (/url\(".*'.*"\)/.test(url) || /url\('.*".*'\)/.test(url))
+    return url;
+
   if (!keepUrlQuotes && !/^['"].+['"]$/.test(url) && !/url\(.*[\s\(\)].*\)/.test(url) && !/url\(['"]data:[^;]+;charset/.test(url))
     url = url.replace(/["']/g, '');
 
index cb3c9af..efc240e 100644 (file)
@@ -1381,6 +1381,14 @@ vows.describe('integration tests')
       'quotes SVG data URI if with parentheses': [
         'div{background:url(data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2018%2018%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2214%22%20height%3D%2214%22%20transform%3D%22translate(2%202)%22%2F%3E%3C%2Fsvg%3E) bottom left}',
         'div{background:url(\'data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2018%2018%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2214%22%20height%3D%2214%22%20transform%3D%22translate(2%202)%22%2F%3E%3C%2Fsvg%3E\') bottom left}'
+      ],
+      'do not unquote double quoted URI with unescaped single quotes inside': [
+        'a{background:url("data:image/svg+xml,%3csvg%20xmlns%3d\'http://www.w3.org/2000/svg\'/%3e")}',
+        'a{background:url("data:image/svg+xml,%3csvg%20xmlns%3d\'http://www.w3.org/2000/svg\'/%3e")}'
+      ],
+      'do not unquote single quoted URI with unescaped double quotes inside': [
+        'a{background:url(\'data:image/svg+xml,%3csvg%20xmlns%3d"http://www.w3.org/2000/svg"/%3e\')}',
+        'a{background:url(\'data:image/svg+xml,%3csvg%20xmlns%3d"http://www.w3.org/2000/svg"/%3e\')}'
       ]
     }, { root: process.cwd(), relativeTo: process.cwd() })
   )