From: Jakub Pawlowicz Date: Wed, 27 May 2015 08:19:48 +0000 (+0100) Subject: Fixes #583 - URL quoting for SVG data. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=475c39c9bf9993b0982e47e682dda774493636ac;p=clean-css.git Fixes #583 - URL quoting for SVG data. If a SVG content is used directly in data: URI we need to make sure correct quotes are used. It works for any kind of URL however using quotes in the middle of URLs is quite rare. --- diff --git a/History.md b/History.md index bf67f5cc..91b25e30 100644 --- a/History.md +++ b/History.md @@ -19,6 +19,7 @@ * Fixed issue [#575](https://github.com/jakubpawlowicz/clean-css/issues/575) - missing directory as a `target`. * Fixed issue [#577](https://github.com/jakubpawlowicz/clean-css/issues/577) - `background-clip` into shorthand. * Fixed issue [#579](https://github.com/jakubpawlowicz/clean-css/issues/579) - `background-origin` into shorthand. +* Fixed issue [#583](https://github.com/jakubpawlowicz/clean-css/issues/583) - URL quoting for SVG data. [3.2.10 / 2015-05-14](https://github.com/jakubpawlowicz/clean-css/compare/v3.2.9...v3.2.10) ================== diff --git a/lib/urls/rewrite.js b/lib/urls/rewrite.js index ef25130d..36db88e9 100644 --- a/lib/urls/rewrite.js +++ b/lib/urls/rewrite.js @@ -68,10 +68,19 @@ function rebase(uri, options) { normalize(relative(uri, options)); } +function quoteFor(url) { + if (url.indexOf('\'') > -1) + return '"'; + else if (url.indexOf('"') > -1) + return '\''; + else + return ''; +} + function rewriteUrls(data, options, context) { return reduceUrls(data, context, function (url, tempData) { url = url.replace(/^(url\()?\s*['"]?|['"]?\s*\)?$/g, ''); - tempData.push('url(' + rebase(url, options) + ')'); + tempData.push('url(' + quoteFor(url) + rebase(url, options) + quoteFor(url) + ')'); }); } diff --git a/test/integration-test.js b/test/integration-test.js index 435bd565..576b4b9f 100644 --- a/test/integration-test.js +++ b/test/integration-test.js @@ -1081,6 +1081,10 @@ path")}', '@import url(/test/fixtures/partials-relative/base.css);', 'a{background:url(/test/fixtures/partials/extra/down.gif) no-repeat}' ], + 'SVG': [ + "a{background-image:url(\"data:image/svg+xml,\")}", + "a{background-image:url(\"data:image/svg+xml,\")}" + ], 'document-local reference': [ 'svg{marker-end:url(#arrow)}', 'svg{marker-end:url(#arrow)}'