Fix #556
authorRichard van Velzen <rvanvelzen1@gmail.com>
Thu, 23 Oct 2014 14:16:19 +0000 (16:16 +0200)
committerRichard van Velzen <rvanvelzen1@gmail.com>
Sun, 4 Jan 2015 14:01:55 +0000 (15:01 +0100)
`\uFEFF` (ZERO WIDTH NO-BREAK SPACE) is removed when parsing, but was
un-escaped for the output when `ascii_only` was false.

When using
UglifyJS multiple times (creating packages from minified sources, for
example), this would lead to problems because the byte was removed when
parsing for the second time.

lib/output.js

index 7bca4da..72bcdd5 100644 (file)
@@ -86,7 +86,7 @@ function OutputStream(options) {
 
     function make_string(str) {
         var dq = 0, sq = 0;
-        str = str.replace(/[\\\b\f\n\r\t\x22\x27\u2028\u2029\0]/g, function(s){
+        str = str.replace(/[\\\b\f\n\r\t\x22\x27\u2028\u2029\0\ufeff]/g, function(s){
             switch (s) {
               case "\\": return "\\\\";
               case "\b": return "\\b";
@@ -98,6 +98,7 @@ function OutputStream(options) {
               case '"': ++dq; return '"';
               case "'": ++sq; return "'";
               case "\0": return "\\x00";
+              case "\ufeff": return "\\ufeff";
             }
             return s;
         });