summary refs log tree commit diff stats
diff options
context:
space:
mode:
authornigredo-tori <nigredo.tori@gmail.com>2016-05-20 12:17:57 +0600
committerDmitry Polienko <dmitry@eldis.ru>2016-05-20 12:35:34 +0600
commit85c41a1398b35c7a0dc1e8d0b0bbcede1f5c3862 (patch)
tree11811abd3eec4396a8609c8ff95ae54d54030c33
parent268f25225abab72e197274c31ebfee7ab6dbe0d4 (diff)
downloadNim-85c41a1398b35c7a0dc1e8d0b0bbcede1f5c3862.tar.gz
Fix toJSStr for control characters
fixes #4190
Add leading zero to encoded character if it is less than 0x10
-rw-r--r--lib/system/jssys.nim6
-rw-r--r--tests/js/testtojsstr.nim6
2 files changed, 11 insertions, 1 deletions
diff --git a/lib/system/jssys.nim b/lib/system/jssys.nim
index 99997efe6..ce67373bc 100644
--- a/lib/system/jssys.nim
+++ b/lib/system/jssys.nim
@@ -248,8 +248,12 @@ proc toJSStr(s: string): cstring {.asmNoStackFrame, compilerproc.} =
     for (var i = 0; i < len; ++i) {
       if (nonAsciiPart !== null) {
         var offset = (i - nonAsciiOffset) * 2;
+        var code = `s`[i].toString(16);
+        if (code.length == 1) {
+          code = "0"+code;
+        }
         nonAsciiPart[offset] = "%";
-        nonAsciiPart[offset + 1] = `s`[i].toString(16);
+        nonAsciiPart[offset + 1] = code;
       }
       else if (`s`[i] < 128)
         asciiPart[i] = fcc(`s`[i]);
diff --git a/tests/js/testtojsstr.nim b/tests/js/testtojsstr.nim
new file mode 100644
index 000000000..c73b80254
--- /dev/null
+++ b/tests/js/testtojsstr.nim
@@ -0,0 +1,6 @@
+discard """
+  output = ""
+"""
+
+let s: string = "И\n"
+let cs = s.cstring