Skip to content

Commit 16666f3

Browse files
mfikesswannodette
authored andcommitted
CLJS-1573: Self-host: Invalid UTF escaping in cljs-in-cljs
Zero-pad \u escapes
1 parent c59e957 commit 16666f3

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

src/main/clojure/cljs/compiler.cljc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,10 @@
132132
9 "\\t"
133133
(if (< 31 cp 127)
134134
c ; Print simple ASCII characters
135-
#?(:clj (format "\\u%04X" cp)
136-
:cljs (str "\\u" (.toString cp 16))))))) ; Any other character is Unicode
135+
#?(:clj (format "\\u%04X" cp) ; Any other character is Unicode
136+
:cljs (let [unpadded (.toString cp 16)
137+
pad (subs "0000" (.-length unpadded))]
138+
(str "\\u" pad unpadded)))))))
137139

138140
(defn- escape-string [^CharSequence s]
139141
(let [sb #?(:clj (StringBuilder. (count s))

src/test/self/self_host/test.cljs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,40 @@
240240
(is (nil? value))
241241
(is (= "if-let requires a vector for its binding at line 1 " (ex-message (ex-cause error)))))))
242242

243+
(deftest test-CLJS-1573
244+
(cljs/compile-str st
245+
"\"90°\""
246+
nil
247+
{:eval node-eval
248+
:context :expr}
249+
(fn [{:keys [error value]}]
250+
(is (nil? error))
251+
(is (= "\"90\\u00b0\"" value))))
252+
(cljs/compile-str st
253+
"\"Ϊ\""
254+
nil
255+
{:eval node-eval
256+
:context :expr}
257+
(fn [{:keys [error value]}]
258+
(is (nil? error))
259+
(is (= "\"\\u03aa\"" value))))
260+
(cljs/compile-str st
261+
"\"\""
262+
nil
263+
{:eval node-eval
264+
:context :expr}
265+
(fn [{:keys [error value]}]
266+
(is (nil? error))
267+
(is (= "\"\\u1234\"" value))))
268+
(cljs/eval-str st
269+
"\"90°\""
270+
nil
271+
{:eval node-eval
272+
:context :expr}
273+
(fn [{:keys [error value]}]
274+
(is (nil? error))
275+
(is (= "90°" value)))))
276+
243277
#_(deftest test-eval-str-with-require
244278
(async done
245279
(let [l (latch 3 done)]

0 commit comments

Comments
 (0)