Bug 834766 - GC: Fix some more rooting issues found by static analysis r=sphink

This commit is contained in:
Jon Coppeard 2013-01-25 17:48:07 +00:00
parent e004aaa82e
commit 7be3fd4539
4 changed files with 28 additions and 24 deletions

View File

@ -66,6 +66,9 @@ using namespace js::unicode;
using mozilla::CheckedInt;
typedef Rooted<JSLinearString*> RootedLinearString;
typedef Handle<JSLinearString*> HandleLinearString;
static JSLinearString *
ArgToRootedString(JSContext *cx, CallArgs &args, unsigned argno)
{
@ -1854,8 +1857,8 @@ js::str_match(JSContext *cx, unsigned argc, Value *vp)
RootedObject array(cx);
MatchArgType arg = array.address();
RegExpStatics *res = cx->regExpStatics();
Value rval;
if (!DoMatch(cx, res, str, g.regExp(), MatchCallback, arg, MATCH_ARGS, &rval))
RootedValue rval(cx);
if (!DoMatch(cx, res, str, g.regExp(), MatchCallback, arg, MATCH_ARGS, rval.address()))
return false;
if (g.regExp().global())
@ -2013,8 +2016,8 @@ FindReplaceLength(JSContext *cx, RegExpStatics *res, ReplaceData &rdata, size_t
JS_ASSERT(!rdata.elembase->getOps()->lookupProperty);
JS_ASSERT(!rdata.elembase->getOps()->getProperty);
Value match;
if (!res->createLastMatch(cx, &match))
RootedValue match(cx);
if (!res->createLastMatch(cx, match.address()))
return false;
JSString *str = match.toString();
@ -2027,8 +2030,8 @@ FindReplaceLength(JSContext *cx, RegExpStatics *res, ReplaceData &rdata, size_t
return false;
}
Value v;
if (HasDataProperty(cx, rdata.elembase, AtomToId(atom), &v) && v.isString()) {
RootedValue v(cx);
if (HasDataProperty(cx, rdata.elembase, AtomToId(atom), v.address()) && v.isString()) {
rdata.repstr = v.toString()->ensureLinear(cx);
if (!rdata.repstr)
return false;
@ -3158,7 +3161,7 @@ str_slice(JSContext *cx, unsigned argc, Value *vp)
* HTML composition aids.
*/
static bool
tagify(JSContext *cx, const char *begin, JSLinearString *param, const char *end,
tagify(JSContext *cx, const char *begin, HandleLinearString param, const char *end,
CallReceiver call)
{
JSString *thisstr = ThisToStringForStringProto(cx, call);
@ -3231,7 +3234,7 @@ tagify(JSContext *cx, const char *begin, JSLinearString *param, const char *end,
static JSBool
tagify_value(JSContext *cx, CallArgs args, const char *begin, const char *end)
{
JSLinearString *param = ArgToRootedString(cx, args, 0);
RootedLinearString param(cx, ArgToRootedString(cx, args, 0));
if (!param)
return false;
@ -3241,19 +3244,19 @@ tagify_value(JSContext *cx, CallArgs args, const char *begin, const char *end)
static JSBool
str_bold(JSContext *cx, unsigned argc, Value *vp)
{
return tagify(cx, "b", NULL, NULL, CallReceiverFromVp(vp));
return tagify(cx, "b", NullPtr(), NULL, CallReceiverFromVp(vp));
}
static JSBool
str_italics(JSContext *cx, unsigned argc, Value *vp)
{
return tagify(cx, "i", NULL, NULL, CallReceiverFromVp(vp));
return tagify(cx, "i", NullPtr(), NULL, CallReceiverFromVp(vp));
}
static JSBool
str_fixed(JSContext *cx, unsigned argc, Value *vp)
{
return tagify(cx, "tt", NULL, NULL, CallReceiverFromVp(vp));
return tagify(cx, "tt", NullPtr(), NULL, CallReceiverFromVp(vp));
}
static JSBool
@ -3283,37 +3286,37 @@ str_anchor(JSContext *cx, unsigned argc, Value *vp)
static JSBool
str_strike(JSContext *cx, unsigned argc, Value *vp)
{
return tagify(cx, "strike", NULL, NULL, CallReceiverFromVp(vp));
return tagify(cx, "strike", NullPtr(), NULL, CallReceiverFromVp(vp));
}
static JSBool
str_small(JSContext *cx, unsigned argc, Value *vp)
{
return tagify(cx, "small", NULL, NULL, CallReceiverFromVp(vp));
return tagify(cx, "small", NullPtr(), NULL, CallReceiverFromVp(vp));
}
static JSBool
str_big(JSContext *cx, unsigned argc, Value *vp)
{
return tagify(cx, "big", NULL, NULL, CallReceiverFromVp(vp));
return tagify(cx, "big", NullPtr(), NULL, CallReceiverFromVp(vp));
}
static JSBool
str_blink(JSContext *cx, unsigned argc, Value *vp)
{
return tagify(cx, "blink", NULL, NULL, CallReceiverFromVp(vp));
return tagify(cx, "blink", NullPtr(), NULL, CallReceiverFromVp(vp));
}
static JSBool
str_sup(JSContext *cx, unsigned argc, Value *vp)
{
return tagify(cx, "sup", NULL, NULL, CallReceiverFromVp(vp));
return tagify(cx, "sup", NullPtr(), NULL, CallReceiverFromVp(vp));
}
static JSBool
str_sub(JSContext *cx, unsigned argc, Value *vp)
{
return tagify(cx, "sub", NULL, NULL, CallReceiverFromVp(vp));
return tagify(cx, "sub", NullPtr(), NULL, CallReceiverFromVp(vp));
}
#endif /* JS_HAS_STR_HTML_HELPERS */
@ -4280,8 +4283,8 @@ str_decodeURI(JSContext *cx, unsigned argc, Value *vp)
if (!str)
return false;
Value result;
if (!Decode(cx, str, js_uriReservedPlusPound_ucstr, &result))
RootedValue result(cx);
if (!Decode(cx, str, js_uriReservedPlusPound_ucstr, result.address()))
return false;
args.rval().set(result);

View File

@ -2501,7 +2501,7 @@ TypedArrayTemplate<double>::copyIndexToValue(JSObject *tarray, uint32_t index,
}
JSBool
DataViewObject::construct(JSContext *cx, JSObject *bufobj, const CallArgs &args, JSObject *proto)
DataViewObject::construct(JSContext *cx, JSObject *bufobj, const CallArgs &args, HandleObject proto)
{
if (!bufobj->isArrayBuffer()) {
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_NOT_EXPECTED_TYPE,
@ -2585,7 +2585,7 @@ DataViewObject::class_constructor(JSContext *cx, unsigned argc, Value *vp)
return true;
}
return construct(cx, bufobj, args, NULL);
return construct(cx, bufobj, args, NullPtr());
}
/* static */ bool

View File

@ -339,7 +339,7 @@ private:
static JSBool class_constructor(JSContext *cx, unsigned argc, Value *vp);
static JSBool constructWithProto(JSContext *cx, unsigned argc, Value *vp);
static JSBool construct(JSContext *cx, JSObject *bufobj, const CallArgs &args,
JSObject *proto);
HandleObject proto);
static inline DataViewObject *
create(JSContext *cx, uint32_t byteOffset, uint32_t byteLength,

View File

@ -276,7 +276,7 @@ WeakMap_set_impl(JSContext *cx, CallArgs args)
if (!key)
return false;
Value value = (args.length() > 1) ? args[1] : UndefinedValue();
RootedValue value(cx, (args.length() > 1) ? args[1] : UndefinedValue());
Rooted<JSObject*> thisObj(cx, &args.thisv().toObject());
ObjectValueMap *map = GetObjectMap(thisObj);
@ -322,8 +322,9 @@ WeakMap_set(JSContext *cx, unsigned argc, Value *vp)
}
JS_FRIEND_API(JSBool)
JS_NondeterministicGetWeakMapKeys(JSContext *cx, JSObject *obj, JSObject **ret)
JS_NondeterministicGetWeakMapKeys(JSContext *cx, JSObject *objArg, JSObject **ret)
{
RootedObject obj(cx, objArg);
obj = UnwrapObject(obj);
if (!obj || !obj->isWeakMap()) {
*ret = NULL;