mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 21:50:11 +00:00
[standalone] Fix reuse of va_list in syslog_android.cc.
Also add some missing va_end. TEST=ci Bug: https://github.com/dart-lang/sdk/issues/47939 Change-Id: Iadfbf72493d987dfb1d102922db1b353249a4728 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/224240 Reviewed-by: Alexander Aprelev <aam@google.com> Commit-Queue: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
parent
59979dc973
commit
4b2309c15a
|
@ -17,17 +17,17 @@ namespace dart {
|
|||
namespace embedder {
|
||||
|
||||
static char* MallocFormatedString(const char* format, ...) {
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
intptr_t len = vsnprintf(NULL, 0, format, args);
|
||||
va_end(args);
|
||||
va_list measure_args;
|
||||
va_start(measure_args, format);
|
||||
intptr_t len = vsnprintf(NULL, 0, format, measure_args);
|
||||
va_end(measure_args);
|
||||
|
||||
char* buffer = reinterpret_cast<char*>(malloc(len + 1));
|
||||
MSAN_UNPOISON(buffer, (len + 1));
|
||||
va_list args2;
|
||||
va_start(args2, format);
|
||||
vsnprintf(buffer, (len + 1), format, args2);
|
||||
va_end(args2);
|
||||
va_list print_args;
|
||||
va_start(print_args, format);
|
||||
vsnprintf(buffer, (len + 1), format, print_args);
|
||||
va_end(print_args);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
|
|
@ -729,17 +729,17 @@ Dart_Handle DartUtils::NewDartIOException(const char* exception_name,
|
|||
}
|
||||
|
||||
Dart_Handle DartUtils::NewError(const char* format, ...) {
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
intptr_t len = vsnprintf(NULL, 0, format, args);
|
||||
va_end(args);
|
||||
va_list measure_args;
|
||||
va_start(measure_args, format);
|
||||
intptr_t len = vsnprintf(NULL, 0, format, measure_args);
|
||||
va_end(measure_args);
|
||||
|
||||
char* buffer = reinterpret_cast<char*>(Dart_ScopeAllocate(len + 1));
|
||||
MSAN_UNPOISON(buffer, (len + 1));
|
||||
va_list args2;
|
||||
va_start(args2, format);
|
||||
vsnprintf(buffer, (len + 1), format, args2);
|
||||
va_end(args2);
|
||||
va_list print_args;
|
||||
va_start(print_args, format);
|
||||
vsnprintf(buffer, (len + 1), format, print_args);
|
||||
va_end(print_args);
|
||||
|
||||
return Dart_NewApiError(buffer);
|
||||
}
|
||||
|
@ -749,17 +749,17 @@ Dart_Handle DartUtils::NewInternalError(const char* message) {
|
|||
}
|
||||
|
||||
Dart_Handle DartUtils::NewStringFormatted(const char* format, ...) {
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
intptr_t len = vsnprintf(NULL, 0, format, args);
|
||||
va_end(args);
|
||||
va_list measure_args;
|
||||
va_start(measure_args, format);
|
||||
intptr_t len = vsnprintf(NULL, 0, format, measure_args);
|
||||
va_end(measure_args);
|
||||
|
||||
char* buffer = reinterpret_cast<char*>(Dart_ScopeAllocate(len + 1));
|
||||
MSAN_UNPOISON(buffer, (len + 1));
|
||||
va_list args2;
|
||||
va_start(args2, format);
|
||||
vsnprintf(buffer, (len + 1), format, args2);
|
||||
va_end(args2);
|
||||
va_list print_args;
|
||||
va_start(print_args, format);
|
||||
vsnprintf(buffer, (len + 1), format, print_args);
|
||||
va_end(print_args);
|
||||
|
||||
return NewString(buffer);
|
||||
}
|
||||
|
|
|
@ -19,18 +19,32 @@ void Syslog::VPrint(const char* format, va_list args) {
|
|||
// If we launch the DartVM inside "adb shell" we will only get messages
|
||||
// (critical ones or not) if we print them to stdout/stderr.
|
||||
// We also log using android's logging system.
|
||||
vprintf(format, args);
|
||||
va_list stdio_args;
|
||||
va_copy(stdio_args, args);
|
||||
vprintf(format, stdio_args);
|
||||
fflush(stdout);
|
||||
__android_log_vprint(ANDROID_LOG_INFO, "Dart", format, args);
|
||||
va_end(stdio_args);
|
||||
|
||||
va_list log_args;
|
||||
va_copy(log_args, args);
|
||||
__android_log_vprint(ANDROID_LOG_INFO, "Dart", format, log_args);
|
||||
va_end(log_args);
|
||||
}
|
||||
|
||||
void Syslog::VPrintErr(const char* format, va_list args) {
|
||||
// If we launch the DartVM inside "adb shell" we will only get messages
|
||||
// (critical ones or not) if we print them to stdout/stderr.
|
||||
// We also log using android's logging system.
|
||||
vfprintf(stderr, format, args);
|
||||
va_list stdio_args;
|
||||
va_copy(stdio_args, args);
|
||||
vfprintf(stderr, format, stdio_args);
|
||||
fflush(stderr);
|
||||
__android_log_vprint(ANDROID_LOG_ERROR, "Dart", format, args);
|
||||
va_end(stdio_args);
|
||||
|
||||
va_list log_args;
|
||||
va_copy(log_args, args);
|
||||
__android_log_vprint(ANDROID_LOG_ERROR, "Dart", format, log_args);
|
||||
va_end(log_args);
|
||||
}
|
||||
|
||||
} // namespace dart
|
||||
|
|
|
@ -80,14 +80,16 @@ void DisassembleToJSONStream::ConsumeInstruction(char* hex_buffer,
|
|||
}
|
||||
|
||||
void DisassembleToJSONStream::Print(const char* format, ...) {
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
intptr_t len = Utils::VSNPrint(NULL, 0, format, args);
|
||||
va_end(args);
|
||||
va_list measure_args;
|
||||
va_start(measure_args, format);
|
||||
intptr_t len = Utils::VSNPrint(NULL, 0, format, measure_args);
|
||||
va_end(measure_args);
|
||||
|
||||
char* p = reinterpret_cast<char*>(malloc(len + 1));
|
||||
va_start(args, format);
|
||||
intptr_t len2 = Utils::VSNPrint(p, len, format, args);
|
||||
va_end(args);
|
||||
va_list print_args;
|
||||
va_start(print_args, format);
|
||||
intptr_t len2 = Utils::VSNPrint(p, len, format, print_args);
|
||||
va_end(print_args);
|
||||
ASSERT(len == len2);
|
||||
for (intptr_t i = 0; i < len; i++) {
|
||||
if (p[i] == '\n' || p[i] == '\r') {
|
||||
|
@ -134,10 +136,10 @@ void DisassembleToMemory::Print(const char* format, ...) {
|
|||
if (overflowed_) {
|
||||
return;
|
||||
}
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
intptr_t len = Utils::VSNPrint(NULL, 0, format, args);
|
||||
va_end(args);
|
||||
va_list measure_args;
|
||||
va_start(measure_args, format);
|
||||
intptr_t len = Utils::VSNPrint(NULL, 0, format, measure_args);
|
||||
va_end(measure_args);
|
||||
if (remaining_ < len + 100) {
|
||||
*buffer_++ = '.';
|
||||
*buffer_++ = '.';
|
||||
|
@ -147,9 +149,10 @@ void DisassembleToMemory::Print(const char* format, ...) {
|
|||
overflowed_ = true;
|
||||
return;
|
||||
}
|
||||
va_start(args, format);
|
||||
intptr_t len2 = Utils::VSNPrint(buffer_, len, format, args);
|
||||
va_end(args);
|
||||
va_list print_args;
|
||||
va_start(print_args, format);
|
||||
intptr_t len2 = Utils::VSNPrint(buffer_, len, format, print_args);
|
||||
va_end(print_args);
|
||||
ASSERT(len == len2);
|
||||
buffer_ += len;
|
||||
remaining_ -= len;
|
||||
|
|
|
@ -164,16 +164,16 @@ void JSONStream::PrintError(intptr_t code, const char* details_format, ...) {
|
|||
JSONObject data(&jsobj, "data");
|
||||
PrintRequest(&data, this);
|
||||
if (details_format != NULL) {
|
||||
va_list args;
|
||||
va_start(args, details_format);
|
||||
intptr_t len = Utils::VSNPrint(NULL, 0, details_format, args);
|
||||
va_end(args);
|
||||
va_list measure_args;
|
||||
va_start(measure_args, details_format);
|
||||
intptr_t len = Utils::VSNPrint(NULL, 0, details_format, measure_args);
|
||||
va_end(measure_args);
|
||||
|
||||
char* buffer = Thread::Current()->zone()->Alloc<char>(len + 1);
|
||||
va_list args2;
|
||||
va_start(args2, details_format);
|
||||
Utils::VSNPrint(buffer, (len + 1), details_format, args2);
|
||||
va_end(args2);
|
||||
va_list print_args;
|
||||
va_start(print_args, details_format);
|
||||
Utils::VSNPrint(buffer, (len + 1), details_format, print_args);
|
||||
va_end(print_args);
|
||||
data.AddProperty("details", buffer);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,16 +105,16 @@ static ArrayPtr Eval(Dart_Handle lib, const char* expr) {
|
|||
}
|
||||
|
||||
static ArrayPtr EvalF(Dart_Handle lib, const char* fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
intptr_t len = Utils::VSNPrint(NULL, 0, fmt, args);
|
||||
va_end(args);
|
||||
va_list messure_args;
|
||||
va_start(messure_args, fmt);
|
||||
intptr_t len = Utils::VSNPrint(NULL, 0, fmt, messure_args);
|
||||
va_end(messure_args);
|
||||
|
||||
char* buffer = Thread::Current()->zone()->Alloc<char>(len + 1);
|
||||
va_list args2;
|
||||
va_start(args2, fmt);
|
||||
Utils::VSNPrint(buffer, (len + 1), fmt, args2);
|
||||
va_end(args2);
|
||||
va_list print_args;
|
||||
va_start(print_args, fmt);
|
||||
Utils::VSNPrint(buffer, (len + 1), fmt, print_args);
|
||||
va_end(print_args);
|
||||
|
||||
return Eval(lib, buffer);
|
||||
}
|
||||
|
|
|
@ -349,14 +349,16 @@ void TimelineEventArguments::FormatArgument(intptr_t i,
|
|||
va_list args) {
|
||||
ASSERT(i >= 0);
|
||||
ASSERT(i < length_);
|
||||
va_list args2;
|
||||
va_copy(args2, args);
|
||||
intptr_t len = Utils::VSNPrint(NULL, 0, fmt, args);
|
||||
va_end(args);
|
||||
va_list measure_args;
|
||||
va_copy(measure_args, args);
|
||||
intptr_t len = Utils::VSNPrint(NULL, 0, fmt, measure_args);
|
||||
va_end(measure_args);
|
||||
|
||||
char* buffer = reinterpret_cast<char*>(malloc(len + 1));
|
||||
Utils::VSNPrint(buffer, (len + 1), fmt, args2);
|
||||
va_end(args2);
|
||||
va_list print_args;
|
||||
va_copy(print_args, args);
|
||||
Utils::VSNPrint(buffer, (len + 1), fmt, print_args);
|
||||
va_end(print_args);
|
||||
|
||||
SetArgument(i, name, buffer);
|
||||
}
|
||||
|
@ -546,6 +548,7 @@ void TimelineEvent::FormatArgument(intptr_t i,
|
|||
va_list args;
|
||||
va_start(args, fmt);
|
||||
arguments_.FormatArgument(i, name, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void TimelineEvent::Complete() {
|
||||
|
@ -846,6 +849,7 @@ void TimelineEventScope::FormatArgument(intptr_t i,
|
|||
va_list args;
|
||||
va_start(args, fmt);
|
||||
arguments_.FormatArgument(i, name, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void TimelineEventScope::StealArguments(TimelineEvent* event) {
|
||||
|
|
|
@ -279,6 +279,7 @@ intptr_t V8SnapshotProfileWriter::StringsTable::AddFormatted(const char* fmt,
|
|||
va_list args;
|
||||
va_start(args, fmt);
|
||||
const char* str = OS::VSCreate(zone_, fmt, args);
|
||||
va_end(args);
|
||||
if (auto const kv = index_map_.Lookup(str)) {
|
||||
return kv->value;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue