]> Cypherpunks.ru repositories - gostls13.git/commitdiff
misc/wasm: fix command line arguments containing multi-byte characters
authorRichard Musiol <mail@richard-musiol.de>
Thu, 25 Apr 2019 08:55:49 +0000 (10:55 +0200)
committerBrad Fitzpatrick <bradfitz@golang.org>
Mon, 29 Apr 2019 17:33:47 +0000 (17:33 +0000)
Command line arguments containing multi-byte characters were causing
go_js_wasm_exec to crash (RangeError: Source is too large), because
their byte length was not handled correctly. This change fixes the bug.

Fixes #31645.

Change-Id: I7860ebf5b12da37d9d0f43d4b6a22d326a90edaf
Reviewed-on: https://go-review.googlesource.com/c/go/+/173877
Run-TryBot: Richard Musiol <neelance@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
misc/wasm/wasm_exec.js

index 29427d91e502c4ad931b5e4bd45ee89744e0fac6..a1d88e6eac169240c14eb9bea734fc83c4b6b8d0 100644 (file)
                        let offset = 4096;
 
                        const strPtr = (str) => {
-                               let ptr = offset;
-                               new Uint8Array(mem.buffer, offset, str.length + 1).set(encoder.encode(str + "\0"));
-                               offset += str.length + (8 - (str.length % 8));
+                               const ptr = offset;
+                               const bytes = encoder.encode(str + "\0");
+                               new Uint8Array(mem.buffer, offset, bytes.length).set(bytes);
+                               offset += bytes.length;
+                               if (offset % 8 !== 0) {
+                                       offset += 8 - (offset % 8);
+                               }
                                return ptr;
                        };