From: Jakub Pawlowicz Date: Mon, 14 Jul 2014 21:41:46 +0000 (+0100) Subject: Fixes #313 - processing comment marks in urls. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=05d0f5c5106c8c26ec7dc062b90e431b52e53bc2;p=clean-css.git Fixes #313 - processing comment marks in urls. --- diff --git a/History.md b/History.md index aa9ea356..5361d122 100644 --- a/History.md +++ b/History.md @@ -1,6 +1,7 @@ [2.2.8 / 2014-xx-xx](https://github.com/GoalSmashers/clean-css/compare/v2.2.7...v2.2.8) ================== +* Fixed issue [#313](https://github.com/GoalSmashers/clean-css/issues/313) - processing comment marks in urls. * Fixed issue [#315](https://github.com/GoalSmashers/clean-css/issues/315) - rgba/hsla -> transparent in gradients. [2.2.7 / 2014-07-10](https://github.com/GoalSmashers/clean-css/compare/v2.2.6...v2.2.7) diff --git a/lib/text/quote-scanner.js b/lib/text/quote-scanner.js index 83dc49f5..cd2abf64 100644 --- a/lib/text/quote-scanner.js +++ b/lib/text/quote-scanner.js @@ -3,21 +3,35 @@ this.data = data; }; - var findCommentEnd = function(data, matched, cursor) { + var findQuoteEnd = function(data, matched, cursor, oldCursor) { var commentStartMark = '/*'; var commentEndMark = '*/'; var escapeMark = '\\'; + var blockEndMark = '}'; + var dataPrefix = data.substring(oldCursor, cursor); + var commentEndedAt = dataPrefix.lastIndexOf(commentEndMark, cursor); + var commentStartedAt = dataPrefix.lastIndexOf(commentStartMark, cursor); var commentStarted = false; + if (commentEndedAt >= cursor && commentStartedAt > -1) + commentStarted = true; + if (commentStartedAt < cursor && commentStartedAt > commentEndedAt) + commentStarted = true; + + if (commentStarted) { + var commentEndsAt = data.indexOf(commentEndMark, cursor); + if (commentEndsAt > -1) + return commentEndsAt; + + commentEndsAt = data.indexOf(blockEndMark, cursor); + return commentEndsAt > -1 ? commentEndsAt - 1 : data.length; + } + while (true) { if (data[cursor] === undefined) break; - if (!commentStarted && data[cursor] == commentEndMark[1] && data[cursor - 1] == commentEndMark[0]) - break; if (data[cursor] == matched && data[cursor - 1] != escapeMark) break; - if (data[cursor] == commentStartMark[1] && data[cursor - 1] == commentStartMark[0]) - commentStarted = true; cursor++; } @@ -56,7 +70,7 @@ if (nextStart == -1) break; - nextEnd = findCommentEnd(data, matchedMark, nextStart + 1); + nextEnd = findQuoteEnd(data, matchedMark, nextStart + 1, cursor); if (nextEnd == -1) break; diff --git a/test/unit-test.js b/test/unit-test.js index e7294075..27d95f74 100644 --- a/test/unit-test.js +++ b/test/unit-test.js @@ -1384,7 +1384,8 @@ title']{display:block}", 'of an unknown file with extra whitespace': [ "@import url( /fake.css );", "@import url(/fake.css);" - ] + ], + 'of comment chars within import url': "@import 'necolas/normalize.css@*/normalize.css';" }, { processImport: false }), '@import with no import and no advanced': cssContext({ 'empty body': [