Revision: 6495
Author: [email protected]
Date: Wed Jan 26 07:16:13 2011
Log: Fix another message object leak.
Review URL: http://codereview.chromium.org/6269021
http://code.google.com/p/v8/source/detail?r=6495
Modified:
/branches/bleeding_edge/src/messages.js
/branches/bleeding_edge/test/cctest/test-api.cc
=======================================
--- /branches/bleeding_edge/src/messages.js Tue Jan 25 10:42:35 2011
+++ /branches/bleeding_edge/src/messages.js Wed Jan 26 07:16:13 2011
@@ -82,8 +82,11 @@
var result = format;
for (var i = 0; i < args.length; i++) {
var str;
- try { str = ToDetailString(args[i]); }
- catch (e) { str = "#<error>"; }
+ try {
+ str = ToDetailString(args[i]);
+ } catch (e) {
+ str = "#<error>";
+ }
result = ArrayJoin.call(StringSplit.call(result, "%" + i), str);
}
return result;
@@ -124,7 +127,9 @@
var constructor = obj.constructor;
if (!constructor) return ToStringCheckErrorObject(obj);
var constructorName = constructor.name;
- if (!constructorName) return ToStringCheckErrorObject(obj);
+ if (!constructorName || !IS_STRING(constructorName)) {
+ return ToStringCheckErrorObject(obj);
+ }
return "#<" + GetInstanceName(constructorName) + ">";
} else {
return ToStringCheckErrorObject(obj);
=======================================
--- /branches/bleeding_edge/test/cctest/test-api.cc Tue Jan 25 00:48:59 2011
+++ /branches/bleeding_edge/test/cctest/test-api.cc Wed Jan 26 07:16:13 2011
@@ -2389,6 +2389,11 @@
CompileRun("asdf;");
v8::Handle<Value> string = CompileRun("try { asdf; } catch(e) { e + '';
}");
CHECK(string->Equals(v8_str("Whoops")));
+ CompileRun("ReferenceError.prototype.constructor = new Object();"
+ "ReferenceError.prototype.constructor.name = 1;"
+ "Number.prototype.toString = function() { return 'Whoops'; };"
+ "ReferenceError.prototype.toString =
Object.prototype.toString;");
+ CompileRun("asdf;");
v8::V8::RemoveMessageListeners(check_message);
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev