Bug 970001 - Fix Valgrind-detected leaks involving sourcePolicy. r=till

This commit is contained in:
Jason Orendorff 2014-02-20 20:22:36 -05:00
parent 936c641c73
commit 96076a1bed
4 changed files with 13 additions and 12 deletions

View File

@ -1236,7 +1236,7 @@ class CloneBufferObject : public JSObject {
}
uint64_t *data() const {
return static_cast<uint64_t*>(getReservedSlot(0).toPrivate());
return static_cast<uint64_t*>(getReservedSlot(DATA_SLOT).toPrivate());
}
void setData(uint64_t *aData) {

View File

@ -834,7 +834,9 @@ ParseCompileOptions(JSContext *cx, CompileOptions &options, HandleObject opts,
JSString *s = ToString(cx, v);
if (!s)
return false;
char *policy = JS_EncodeStringToUTF8(cx, s);
JSAutoByteString bytes;
char *policy = bytes.encodeUtf8(cx, s);
if (!policy)
return false;
if (strcmp(policy, "NO_SOURCE") == 0) {

View File

@ -4514,6 +4514,7 @@ DebuggerGenericEval(JSContext *cx, const char *fullMethodName, const Value &code
}
/* Set options from object if provided. */
JSAutoByteString url_bytes;
char *url = nullptr;
unsigned lineNumber = 1;
@ -4527,7 +4528,9 @@ DebuggerGenericEval(JSContext *cx, const char *fullMethodName, const Value &code
RootedString url_str(cx, ToString<CanGC>(cx, v));
if (!url_str)
return false;
url = JS_EncodeString(cx, url_str);
url = url_bytes.encodeLatin1(cx, url_str);
if (!url)
return false;
}
if (!JS_GetProperty(cx, opts, "lineNumber", &v))
@ -4594,8 +4597,6 @@ DebuggerGenericEval(JSContext *cx, const char *fullMethodName, const Value &code
bool ok = EvaluateInEnv(cx, env, thisv, frame,
ConstTwoByteChars(flat->chars(), flat->length()),
flat->length(), url ? url : "debugger eval code", lineNumber, &rval);
if (url)
JS_free(cx, url);
return dbg->receiveCompletionValue(ac, ok, rval, vp);
}

View File

@ -92,27 +92,25 @@ js::intrinsic_ThrowError(JSContext *cx, unsigned argc, Value *vp)
JS_ASSERT(efs->argCount == args.length() - 1);
#endif
char *errorArgs[3] = {nullptr, nullptr, nullptr};
JSAutoByteString errorArgs[3];
for (unsigned i = 1; i < 4 && i < args.length(); i++) {
RootedValue val(cx, args[i]);
if (val.isInt32()) {
JSString *str = ToString<CanGC>(cx, val);
if (!str)
return false;
errorArgs[i - 1] = JS_EncodeString(cx, str);
errorArgs[i - 1].encodeLatin1(cx, str);
} else if (val.isString()) {
errorArgs[i - 1] = JS_EncodeString(cx, ToString<CanGC>(cx, val));
errorArgs[i - 1].encodeLatin1(cx, val.toString());
} else {
errorArgs[i - 1] = DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, val, NullPtr());
errorArgs[i - 1].initBytes(DecompileValueGenerator(cx, JSDVG_SEARCH_STACK, val, NullPtr()));
}
if (!errorArgs[i - 1])
return false;
}
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, errorNumber,
errorArgs[0], errorArgs[1], errorArgs[2]);
for (unsigned i = 0; i < 3; i++)
js_free(errorArgs[i]);
errorArgs[0].ptr(), errorArgs[1].ptr(), errorArgs[2].ptr());
return false;
}