From: Enrico Granata Date: Mon, 6 Apr 2015 18:41:17 +0000 (+0000) Subject: If memory read does not find a NULL terminator, still print whatever it gathered... X-Git-Tag: llvmorg-3.7.0-rc1~7474 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dc3c3ee8526e1cbfdb4859882f5e4739c5acc37f;p=platform%2Fupstream%2Fllvm.git If memory read does not find a NULL terminator, still print whatever it gathered instead of just NOP'ing out However, remark that this is an incomplete chunk of data by still emitting the "no NULL found" warning rdar://20330073 llvm-svn: 234194 --- diff --git a/lldb/source/Commands/CommandObjectMemory.cpp b/lldb/source/Commands/CommandObjectMemory.cpp index 4f41d9b..23da6e2 100644 --- a/lldb/source/Commands/CommandObjectMemory.cpp +++ b/lldb/source/Commands/CommandObjectMemory.cpp @@ -744,6 +744,7 @@ protected: auto data_addr = addr; auto count = item_count; item_count = 0; + bool break_on_no_NULL = false; while (item_count < count) { std::string buffer; @@ -756,17 +757,24 @@ protected: result.SetStatus(eReturnStatusFailed); return false; } + if (item_byte_size == read) { result.AppendWarningWithFormat("unable to find a NULL terminated string at 0x%" PRIx64 ".Consider increasing the maximum read length.\n", data_addr); - break; + --read; + break_on_no_NULL = true; } - read+=1; // account for final NULL byte + else + ++read; // account for final NULL byte + memcpy(data_ptr, &buffer[0], read); data_ptr += read; data_addr += read; bytes_read += read; item_count++; // if we break early we know we only read item_count strings + + if (break_on_no_NULL) + break; } data_sp.reset(new DataBufferHeap(data_sp->GetBytes(),bytes_read+1)); }