Possible fix for bug 354595. Deal with PL_DHashTableOperate() returning null as it does when out of memory. Fix found by raymond@lala.com, r+sr=jonas@sicking.cc

git-svn-id: svn://10.0.0.236/trunk@224663 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
jst%mozilla.org
2007-04-17 23:10:20 +00:00
parent 56b8831146
commit bfd529c86c

View File

@@ -127,9 +127,11 @@ CreateNPObjectMember(NPP npp, JSContext *cx, JSObject *obj,
static JSClass sNPObjectJSWrapperClass =
{
"NPObject JS wrapper class", JSCLASS_HAS_PRIVATE | JSCLASS_NEW_RESOLVE | JSCLASS_NEW_ENUMERATE,
"NPObject JS wrapper class",
JSCLASS_HAS_PRIVATE | JSCLASS_NEW_RESOLVE | JSCLASS_NEW_ENUMERATE,
NPObjWrapper_AddProperty, NPObjWrapper_DelProperty,
NPObjWrapper_GetProperty, NPObjWrapper_SetProperty, (JSEnumerateOp)NPObjWrapper_newEnumerate,
NPObjWrapper_GetProperty, NPObjWrapper_SetProperty,
(JSEnumerateOp)NPObjWrapper_newEnumerate,
(JSResolveOp)NPObjWrapper_NewResolve, JS_ConvertStub,
NPObjWrapper_Finalize, nsnull, nsnull, NPObjWrapper_Call, nsnull, nsnull,
nsnull
@@ -952,6 +954,10 @@ nsJSObjWrapper::GetNewOrUsed(NPP npp, JSContext *cx, JSObject *obj)
JSObjWrapperHashEntry *entry =
NS_STATIC_CAST(JSObjWrapperHashEntry *,
PL_DHashTableOperate(&sJSObjWrappers, &key, PL_DHASH_ADD));
if (!entry) {
// Out of memory.
return nsnull;
}
if (PL_DHASH_ENTRY_IS_BUSY(entry) && entry->mJSObjWrapper) {
// Found a live nsJSObjWrapper, return it.
@@ -1373,7 +1379,6 @@ NPObjWrapper_NewResolve(JSContext *cx, JSObject *obj, jsval id, uintN flags,
} else {
ok = ::JS_DefineElement(cx, obj, JSVAL_TO_INT(id), JSVAL_VOID, nsnull,
nsnull, JSPROP_ENUMERATE);
}
if (!ok) {
@@ -1483,6 +1488,12 @@ nsNPObjWrapper::GetNewOrUsed(NPP npp, JSContext *cx, NPObject *npobj)
NS_STATIC_CAST(NPObjWrapperHashEntry *,
PL_DHashTableOperate(&sNPObjWrappers, npobj,
PL_DHASH_ADD));
if (!entry) {
// Out of memory
JS_ReportOutOfMemory(cx);
return nsnull;
}
if (PL_DHASH_ENTRY_IS_BUSY(entry) && entry->mJSObj) {
// Found a live NPObject wrapper, return it.
@@ -1754,7 +1765,7 @@ CreateNPObjectMember(NPP npp, JSContext *cx, JSObject *obj,
PR_Free(memberPrivate);
return false;
}
*vp = OBJECT_TO_JSVAL(memobj);
::JS_AddRoot(cx, vp);
@@ -1782,7 +1793,7 @@ CreateNPObjectMember(NPP npp, JSContext *cx, JSObject *obj,
memberPrivate->fieldValue = fieldValue;
memberPrivate->methodName = id;
memberPrivate->npp = npp;
::JS_RemoveRoot(cx, vp);
return true;
@@ -1875,7 +1886,7 @@ NPObjectMember_Call(JSContext *cx, JSObject *obj,
return JS_FALSE;
}
}
NPVariant npv;
JSBool ok;
ok = npobj->_class->invoke(npobj, (NPIdentifier)memberPrivate->methodName,