Author: [email protected]
Date: Tue Feb 24 05:33:49 2009
New Revision: 1350
Modified:
branches/bleeding_edge/src/objects.cc
branches/bleeding_edge/test/cctest/test-compiler.cc
Log:
Fixed regression http://code.google.com/p/v8/issues/detail?id=236.
The problem was that the case of 'undefined' script source wasn't
handled in Script::InitLineEnds.
Review URL: http://codereview.chromium.org/28068
Modified: branches/bleeding_edge/src/objects.cc
==============================================================================
--- branches/bleeding_edge/src/objects.cc (original)
+++ branches/bleeding_edge/src/objects.cc Tue Feb 24 05:33:49 2009
@@ -6953,6 +6953,12 @@
void Script::InitLineEnds() {
if (!line_ends()->IsUndefined()) return;
+ if (source()->IsUndefined()) {
+ set_line_ends(*(Factory::NewArrayLiteral(0)));
+ ASSERT(line_ends()->IsJSArray());
+ return;
+ }
+
Handle<String> src(String::cast(source()));
const int src_len = src->length();
Handle<String> new_line = Factory::NewStringFromAscii(CStrVector("\n"));
Modified: branches/bleeding_edge/test/cctest/test-compiler.cc
==============================================================================
--- branches/bleeding_edge/test/cctest/test-compiler.cc (original)
+++ branches/bleeding_edge/test/cctest/test-compiler.cc Tue Feb 24 05:33:49
2009
@@ -302,3 +302,17 @@
&has_pending_exception);
CHECK(!has_pending_exception);
}
+
+
+// Regression 236. Calling InitLineEnds on a Script with undefined
+// source resulted in crash.
+TEST(Regression236) {
+ InitializeVM();
+ v8::HandleScope scope;
+
+ Handle<Script> script = Factory::NewScript(Factory::empty_string());
+ script->set_source(Heap::undefined_value());
+ CHECK_EQ(-1, script->GetLineNumber(0));
+ CHECK_EQ(-1, script->GetLineNumber(100));
+ CHECK_EQ(-1, script->GetLineNumber(-1));
+}
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---