| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 8c6c0f9 commit 0a43697
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -125,17 +125,19 @@ class CodeEventLogger::NameBuffer { | |||
| 125 | 125 | } | |
| 126 | 126 | ||
| 127 | 127 | void AppendInt(int n) { | |
| 128 | - Vector<char> buffer(utf8_buffer_ + utf8_pos_, | ||
| 129 | - kUtf8BufferSize - utf8_pos_); | ||
| 128 | + int space = kUtf8BufferSize - utf8_pos_; | ||
| 129 | + if (space <= 0) return; | ||
| 130 | + Vector<char> buffer(utf8_buffer_ + utf8_pos_, space); | ||
| 130 | 131 | int size = SNPrintF(buffer, "%d", n); | |
| 131 | 132 | if (size > 0 && utf8_pos_ + size <= kUtf8BufferSize) { | |
| 132 | 133 | utf8_pos_ += size; | |
| 133 | 134 | } | |
| 134 | 135 | } | |
| 135 | 136 | ||
| 136 | 137 | void AppendHex(uint32_t n) { | |
| 137 | - Vector<char> buffer(utf8_buffer_ + utf8_pos_, | ||
| 138 | - kUtf8BufferSize - utf8_pos_); | ||
| 138 | + int space = kUtf8BufferSize - utf8_pos_; | ||
| 139 | + if (space <= 0) return; | ||
| 140 | + Vector<char> buffer(utf8_buffer_ + utf8_pos_, space); | ||
| 139 | 141 | int size = SNPrintF(buffer, "%x", n); | |
| 140 | 142 | if (size > 0 && utf8_pos_ + size <= kUtf8BufferSize) { | |
| 141 | 143 | utf8_pos_ += size; | |
@@ -147,7 +149,7 @@ class CodeEventLogger::NameBuffer { | |||
| 147 | 149 | ||
| 148 | 150 | private: | |
| 149 | 151 | static const int kUtf8BufferSize = 512; | |
| 150 | - static const int kUtf16BufferSize = 128; | ||
| 152 | + static const int kUtf16BufferSize = kUtf8BufferSize; | ||
| 151 | 153 | ||
| 152 | 154 | int utf8_pos_; | |
| 153 | 155 | char utf8_buffer_[kUtf8BufferSize]; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -531,3 +531,58 @@ TEST(LogVersion) { | |||
| 531 | 531 | } | |
| 532 | 532 | isolate->Dispose(); | |
| 533 | 533 | } | |
| 534 | + | ||
| 535 | + | ||
| 536 | + // https://crbug.com/539892 | ||
| 537 | + // CodeCreateEvents with really large names should not crash. | ||
| 538 | + TEST(Issue539892) { | ||
| 539 | + class : public i::CodeEventLogger { | ||
| 540 | + public: | ||
| 541 | + virtual void CodeMoveEvent(Address from, Address to) {} | ||
| 542 | + virtual void CodeDeleteEvent(Address from) {} | ||
| 543 | + virtual void CodeDisableOptEvent(i::Code* code, | ||
| 544 | + i::SharedFunctionInfo* shared) {} | ||
| 545 | + | ||
| 546 | + private: | ||
| 547 | + virtual void LogRecordedBuffer(i::Code* code, i::SharedFunctionInfo* shared, | ||
| 548 | + const char* name, int length) {} | ||
| 549 | + } code_event_logger; | ||
| 550 | + SETUP_FLAGS(); | ||
| 551 | + v8::Isolate::CreateParams create_params; | ||
| 552 | + create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); | ||
| 553 | + v8::Isolate* isolate = v8::Isolate::New(create_params); | ||
| 554 | + | ||
| 555 | + { | ||
| 556 | + ScopedLoggerInitializer initialize_logger(saved_log, saved_prof, isolate); | ||
| 557 | + Logger* logger = initialize_logger.logger(); | ||
| 558 | + logger->addCodeEventListener(&code_event_logger); | ||
| 559 | + | ||
| 560 | + // Function with a really large name. | ||
| 561 | + const char* source_text = | ||
| 562 | + "(function " | ||
| 563 | + "baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 564 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 565 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 566 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 567 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 568 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 569 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 570 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 571 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 572 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 573 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 574 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 575 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 576 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 577 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 578 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
| 579 | + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac" | ||
| 580 | + "(){})();"; | ||
| 581 | + | ||
| 582 | + CompileRun(source_text); | ||
| 583 | + | ||
| 584 | + // Must not crash. | ||
| 585 | + logger->LogCompiledFunctions(); | ||
| 586 | + } | ||
| 587 | + isolate->Dispose(); | ||
| 588 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments