| OLD | NEW | 
|    1 // Copyright 2006-2009 the V8 project authors. All rights reserved. |    1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 
|    2 // Redistribution and use in source and binary forms, with or without |    2 // Redistribution and use in source and binary forms, with or without | 
|    3 // modification, are permitted provided that the following conditions are |    3 // modification, are permitted provided that the following conditions are | 
|    4 // met: |    4 // met: | 
|    5 // |    5 // | 
|    6 //     * Redistributions of source code must retain the above copyright |    6 //     * Redistributions of source code must retain the above copyright | 
|    7 //       notice, this list of conditions and the following disclaimer. |    7 //       notice, this list of conditions and the following disclaimer. | 
|    8 //     * Redistributions in binary form must reproduce the above |    8 //     * Redistributions in binary form must reproduce the above | 
|    9 //       copyright notice, this list of conditions and the following |    9 //       copyright notice, this list of conditions and the following | 
|   10 //       disclaimer in the documentation and/or other materials provided |   10 //       disclaimer in the documentation and/or other materials provided | 
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  263     i::CompleteParserRecorder log; |  263     i::CompleteParserRecorder log; | 
|  264     i::Scanner scanner; |  264     i::Scanner scanner; | 
|  265     scanner.Initialize(i::Handle<i::String>::null(), &stream, i::JAVASCRIPT); |  265     scanner.Initialize(i::Handle<i::String>::null(), &stream, i::JAVASCRIPT); | 
|  266     v8::preparser::PreParser<i::Scanner, i::CompleteParserRecorder> preparser; |  266     v8::preparser::PreParser<i::Scanner, i::CompleteParserRecorder> preparser; | 
|  267     bool result = preparser.PreParseProgram(&scanner, &log, true); |  267     bool result = preparser.PreParseProgram(&scanner, &log, true); | 
|  268     CHECK(result); |  268     CHECK(result); | 
|  269     i::ScriptDataImpl data(log.ExtractData()); |  269     i::ScriptDataImpl data(log.ExtractData()); | 
|  270     CHECK(!data.has_error()); |  270     CHECK(!data.has_error()); | 
|  271   } |  271   } | 
|  272 } |  272 } | 
 |  273  | 
 |  274  | 
 |  275 TEST(RegressChromium62639) { | 
 |  276   int marker; | 
 |  277   i::StackGuard::SetStackLimit( | 
 |  278       reinterpret_cast<uintptr_t>(&marker) - 128 * 1024); | 
 |  279  | 
 |  280   // Ensure that the source code is so big that it triggers preparsing. | 
 |  281   char buffer[4096]; | 
 |  282   const char* program_template = "var x = '%01024d';  // filler\n" | 
 |  283                                  "escape: function() {}"; | 
 |  284   // Fails parsing expecting an identifier after "function". | 
 |  285   // Before fix, didn't check *ok after Expect(Token::Identifier, ok), | 
 |  286   // and then used the invalid currently scanned literal. This always | 
 |  287   // failed in debug mode, and sometimes crashed in release mode. | 
 |  288  | 
 |  289   snprintf(buffer, sizeof(buffer), program_template, 0); | 
 |  290   unibrow::Utf8InputBuffer<256> stream(buffer, strlen(buffer)); | 
 |  291   i::ScriptDataImpl* data = | 
 |  292       i::ParserApi::PreParse(i::Handle<i::String>::null(), &stream, NULL); | 
 |  293   CHECK(data->HasError()); | 
 |  294   delete data; | 
 |  295 } | 
| OLD | NEW |