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 -~----------~----~----~----~------~----~------~--~---
