Bug 566549 - Crash [@ js_AllocSlot] or "Assertion failure: obj->map->ops->defineProperty == js_DefineProperty" with evalcx. r=brendan.

This commit is contained in:
Jason Orendorff 2010-05-19 13:23:53 -05:00
Родитель 7576f0f9a9
Коммит f1a99f8fb8
4 изменённых файлов: 35 добавлений и 0 удалений

Просмотреть файл

@ -808,6 +808,8 @@ js_Execute(JSContext *cx, JSObject *const chain, JSScript *script,
? chain->getGlobal()
: chain;
}
JS_ASSERT(initialVarObj->map->ops->defineProperty == js_DefineProperty);
fp->script = script;
fp->imacpc = NULL;
fp->rval = JSVAL_VOID;

Просмотреть файл

@ -72,6 +72,7 @@
#include "jsscope.h"
#include "jsscript.h"
#include "jstracer.h"
#include "jsxml.h"
#include "prmjtime.h"
@ -2992,6 +2993,13 @@ EvalInContext(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
ok = JS_FALSE;
goto out;
}
if (sobj->isArray() || sobj->isXML() || !sobj->isNative()) {
JS_TransferRequest(scx, cx);
JS_ReportError(cx, "Invalid scope argument to evalcx");
DestroyContext(scx, false);
return JS_FALSE;
}
ok = JS_EvaluateUCScript(scx, sobj, src, srclen,
fp->script->filename,
JS_PCToLineNumber(cx, fp->script,

Просмотреть файл

@ -19,3 +19,4 @@ script regress-560998-1.js
script regress-560998-2.js
script regress-563210.js
script regress-563221.js
script regress-566549.js

Просмотреть файл

@ -0,0 +1,24 @@
// Any copyright is dedicated to the Public Domain.
// http://creativecommons.org/licenses/publicdomain/
// Contributors: Jesse Ruderman <jruderman@gmail.com>,
// Gary Kwong <gary@rumblingedge.com>,
// Jason Orendorff <jorendorff@mozilla.com>
try {
evalcx('var p;', []);
} catch (exc) {}
try {
evalcx('');
Function("evalcx(\"var p\",[])")();
} catch (exc) {}
try {
evalcx('var p;', <x/>);
} catch (exc) {}
try {
evalcx('var p;', <x><p/></x>);
} catch (exc) {}
reportCompare(0, 0, "ok");