Skip to content

Commit 010897c

Browse files
ofrobotsCommit bot
authored andcommitted
1 parent 4f7caf2 commit 010897c

2 files changed

Lines changed: 62 additions & 5 deletions

File tree

src/log.cc

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,17 +123,19 @@ class CodeEventLogger::NameBuffer {
123123
}
124124

125125
void AppendInt(int n) {
126-
Vector<char> buffer(utf8_buffer_ + utf8_pos_,
127-
kUtf8BufferSize - utf8_pos_);
126+
int space = kUtf8BufferSize - utf8_pos_;
127+
if (space <= 0) return;
128+
Vector<char> buffer(utf8_buffer_ + utf8_pos_, space);
128129
int size = SNPrintF(buffer, "%d", n);
129130
if (size > 0 && utf8_pos_ + size <= kUtf8BufferSize) {
130131
utf8_pos_ += size;
131132
}
132133
}
133134

134135
void AppendHex(uint32_t n) {
135-
Vector<char> buffer(utf8_buffer_ + utf8_pos_,
136-
kUtf8BufferSize - utf8_pos_);
136+
int space = kUtf8BufferSize - utf8_pos_;
137+
if (space <= 0) return;
138+
Vector<char> buffer(utf8_buffer_ + utf8_pos_, space);
137139
int size = SNPrintF(buffer, "%x", n);
138140
if (size > 0 && utf8_pos_ + size <= kUtf8BufferSize) {
139141
utf8_pos_ += size;
@@ -145,7 +147,7 @@ class CodeEventLogger::NameBuffer {
145147

146148
private:
147149
static const int kUtf8BufferSize = 512;
148-
static const int kUtf16BufferSize = 128;
150+
static const int kUtf16BufferSize = kUtf8BufferSize;
149151

150152
int utf8_pos_;
151153
char utf8_buffer_[kUtf8BufferSize];

test/cctest/test-log.cc

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,3 +531,58 @@ TEST(LogVersion) {
531531
}
532532
isolate->Dispose();
533533
}
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+
}

0 commit comments

Comments
 (0)