Reviewers: Søren Gjesse,

Description:
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.

Please review this at http://codereview.chromium.org/28068

Affected files:
   M src/objects.cc
   M test/cctest/test-compiler.cc


Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index  
20b71391bad31a8bb8a83ad3a86dad814b102ea4..9876a61935d2a98588c9b22561e078c4701a1189
  
100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -6859,6 +6859,12 @@ Object*  
Dictionary::TransformPropertiesToFastFor(JSObject* obj,
  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"));
Index: test/cctest/test-compiler.cc
diff --git a/test/cctest/test-compiler.cc b/test/cctest/test-compiler.cc
index  
6bfd53b3554ae3ee30d3295dd57570efcee7f8eb..b4da9d55378754f151994f0c24a1749dff1fd9f6
  
100644
--- a/test/cctest/test-compiler.cc
+++ b/test/cctest/test-compiler.cc
@@ -302,3 +302,17 @@ TEST(C2JSFrames) {
                    &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
-~----------~----~----~----~------~----~------~--~---

Reply via email to