Commit 28f9b880 authored by Cherry Zhang's avatar Cherry Zhang

misc/wasm: make sure value ref id is unique

For each Javascript object that returns to Go as a js.Value, we
associate the ref id to it. But if this ref id is copied or
inherited to other object, it would mess up the ref-object
mapping.

In storeValue, make sure the object is indeed the one we are
storing. Otherwise allocate a new ref id.

Fixes #26143.

Change-Id: Ie60bb2f8d1533da1bbe6f46045866515ec2af5a9
Reviewed-on: https://go-review.googlesource.com/121835
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarRichard Musiol <neelance@gmail.com>
parent 6780042f
......@@ -141,7 +141,7 @@
}
let ref = v[this._refProp];
if (ref === undefined) {
if (ref === undefined || this._values[ref] !== v) {
ref = this._values.length;
this._values.push(v);
v[this._refProp] = ref;
......
......@@ -107,6 +107,13 @@ func TestObject(t *testing.T) {
if dummys.Get("someArray") != dummys.Get("someArray") {
t.Errorf("same value not equal")
}
// An object and its prototype should not be equal.
proto := js.Global().Get("Object").Get("prototype")
o := js.Global().Call("eval", "new Object()")
if proto == o {
t.Errorf("object equals to its prototype")
}
}
func TestTypedArrayOf(t *testing.T) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment