diff --git a/js/src/jsinterp.cpp b/js/src/jsinterp.cpp index 106b3ae22bb..c15cbb168f4 100644 --- a/js/src/jsinterp.cpp +++ b/js/src/jsinterp.cpp @@ -4968,7 +4968,10 @@ BEGIN_CASE(JSOP_CALLNAME) goto error; } else { sprop = (JSScopeProperty *)prop; - NATIVE_GET(cx, obj, obj2, sprop, JSGET_METHOD_BARRIER, &rval); + JSObject *normalized = obj; + if (normalized->getClass() == &js_WithClass && !sprop->hasDefaultGetter()) + normalized = js_UnwrapWithObject(cx, normalized); + NATIVE_GET(cx, normalized, obj2, sprop, JSGET_METHOD_BARRIER, &rval); JS_UNLOCK_OBJ(cx, obj2); } diff --git a/js/src/trace-test/tests/basic/bug578041.js b/js/src/trace-test/tests/basic/bug578041.js new file mode 100644 index 00000000000..89d1debe7bd --- /dev/null +++ b/js/src/trace-test/tests/basic/bug578041.js @@ -0,0 +1,5 @@ +// |trace-test| error: invalid arguments + +__defineGetter__('x', Float32Array); +with(this) + x;