From 3da7dcf38a96b7ba8ba0cb61be40210ace3fd91f Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Wed, 5 Feb 2020 21:20:12 -0800 Subject: [PATCH] [lldb/Reproducers] Serialize empty string for char* methods. For the methods taking a char* and a length that have a custom replayer, ignore the incoming string in the instrumentation macro. This prevents potentially reading garbage and blowing up the SB API log. --- lldb/source/API/SBFileSpec.cpp | 4 ++-- lldb/source/API/SBProcess.cpp | 6 +++--- lldb/source/API/SBStructuredData.cpp | 8 ++++---- lldb/source/API/SBThread.cpp | 17 +++++++---------- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/lldb/source/API/SBFileSpec.cpp b/lldb/source/API/SBFileSpec.cpp index a9b3c0f9..3c3ea32 100644 --- a/lldb/source/API/SBFileSpec.cpp +++ b/lldb/source/API/SBFileSpec.cpp @@ -143,8 +143,8 @@ void SBFileSpec::SetDirectory(const char *directory) { } uint32_t SBFileSpec::GetPath(char *dst_path, size_t dst_len) const { - LLDB_RECORD_DUMMY(uint32_t, SBFileSpec, GetPath, (char *, size_t), - dst_path, dst_len); + LLDB_RECORD_METHOD_CONST(uint32_t, SBFileSpec, GetPath, (char *, size_t), "", + dst_len); uint32_t result = m_opaque_up->GetPath(dst_path, dst_len); diff --git a/lldb/source/API/SBProcess.cpp b/lldb/source/API/SBProcess.cpp index ffb5a3f..425ebf6 100644 --- a/lldb/source/API/SBProcess.cpp +++ b/lldb/source/API/SBProcess.cpp @@ -270,7 +270,7 @@ size_t SBProcess::PutSTDIN(const char *src, size_t src_len) { } size_t SBProcess::GetSTDOUT(char *dst, size_t dst_len) const { - LLDB_RECORD_METHOD_CONST(size_t, SBProcess, GetSTDOUT, (char *, size_t), dst, + LLDB_RECORD_METHOD_CONST(size_t, SBProcess, GetSTDOUT, (char *, size_t), "", dst_len); size_t bytes_read = 0; @@ -284,7 +284,7 @@ size_t SBProcess::GetSTDOUT(char *dst, size_t dst_len) const { } size_t SBProcess::GetSTDERR(char *dst, size_t dst_len) const { - LLDB_RECORD_METHOD_CONST(size_t, SBProcess, GetSTDERR, (char *, size_t), dst, + LLDB_RECORD_METHOD_CONST(size_t, SBProcess, GetSTDERR, (char *, size_t), "", dst_len); size_t bytes_read = 0; @@ -299,7 +299,7 @@ size_t SBProcess::GetSTDERR(char *dst, size_t dst_len) const { size_t SBProcess::GetAsyncProfileData(char *dst, size_t dst_len) const { LLDB_RECORD_METHOD_CONST(size_t, SBProcess, GetAsyncProfileData, - (char *, size_t), dst, dst_len); + (char *, size_t), "", dst_len); size_t bytes_read = 0; ProcessSP process_sp(GetSP()); diff --git a/lldb/source/API/SBStructuredData.cpp b/lldb/source/API/SBStructuredData.cpp index bc820ba..7d1b6bf 100644 --- a/lldb/source/API/SBStructuredData.cpp +++ b/lldb/source/API/SBStructuredData.cpp @@ -126,10 +126,10 @@ bool SBStructuredData::GetKeys(lldb::SBStringList &keys) const { if (!m_impl_up) return false; - + if (GetType() != eStructuredDataTypeDictionary) return false; - + StructuredData::ObjectSP obj_sp = m_impl_up->GetObjectSP(); if (!obj_sp) return false; @@ -141,7 +141,7 @@ bool SBStructuredData::GetKeys(lldb::SBStringList &keys) const { StructuredData::ObjectSP array_sp = dict->GetKeys(); StructuredData::Array *key_arr = array_sp->GetAsArray(); assert(key_arr); - + key_arr->ForEach([&keys] (StructuredData::Object *object) -> bool { llvm::StringRef key = object->GetStringValue(""); keys.AppendString(key.str().c_str()); @@ -197,7 +197,7 @@ bool SBStructuredData::GetBooleanValue(bool fail_value) const { size_t SBStructuredData::GetStringValue(char *dst, size_t dst_len) const { LLDB_RECORD_METHOD_CONST(size_t, SBStructuredData, GetStringValue, - (char *, size_t), dst, dst_len); + (char *, size_t), "", dst_len); return (m_impl_up ? m_impl_up->GetStringValue(dst, dst_len) : 0); } diff --git a/lldb/source/API/SBThread.cpp b/lldb/source/API/SBThread.cpp index ff1a428..69342b9 100644 --- a/lldb/source/API/SBThread.cpp +++ b/lldb/source/API/SBThread.cpp @@ -313,8 +313,8 @@ SBThread::GetStopReasonExtendedBacktraces(InstrumentationRuntimeType type) { } size_t SBThread::GetStopDescription(char *dst, size_t dst_len) { - LLDB_RECORD_METHOD(size_t, SBThread, GetStopDescription, (char *, size_t), - dst, dst_len); + LLDB_RECORD_METHOD(size_t, SBThread, GetStopDescription, (char *, size_t), "", + dst_len); std::unique_lock lock; ExecutionContext exe_ctx(m_opaque_sp.get(), lock); @@ -970,23 +970,20 @@ SBError SBThread::StepUsingScriptedThreadPlan(const char *script_class_name) { SBError SBThread::StepUsingScriptedThreadPlan(const char *script_class_name, bool resume_immediately) { LLDB_RECORD_METHOD(lldb::SBError, SBThread, StepUsingScriptedThreadPlan, - (const char *, bool), script_class_name, + (const char *, bool), script_class_name, resume_immediately); lldb::SBStructuredData no_data; - return LLDB_RECORD_RESULT( - StepUsingScriptedThreadPlan(script_class_name, - no_data, - resume_immediately)); + return LLDB_RECORD_RESULT(StepUsingScriptedThreadPlan( + script_class_name, no_data, resume_immediately)); } SBError SBThread::StepUsingScriptedThreadPlan(const char *script_class_name, SBStructuredData &args_data, bool resume_immediately) { LLDB_RECORD_METHOD(lldb::SBError, SBThread, StepUsingScriptedThreadPlan, - (const char *, lldb::SBStructuredData &, bool), - script_class_name, args_data, - resume_immediately); + (const char *, lldb::SBStructuredData &, bool), + script_class_name, args_data, resume_immediately); SBError error; -- 2.7.4