From 177c7520f45ec474387dced653395f37c1430bb1 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Sat, 10 Apr 2021 20:08:20 -0500 Subject: TraceWriterQEMU.cc: Multiple clean ups Change sprintf() to strncpy() to avoid buffer overwrite CID 1399603, Switch to auto pointer for iterator. Initialize _pad field of entry CID 1399603, fclose file on error patch CID 1399621, --- tester/covoar/TraceWriterQEMU.cc | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/tester/covoar/TraceWriterQEMU.cc b/tester/covoar/TraceWriterQEMU.cc index cd325b6..4bc9667 100644 --- a/tester/covoar/TraceWriterQEMU.cc +++ b/tester/covoar/TraceWriterQEMU.cc @@ -34,9 +34,8 @@ * reading the QEMU coverage data files. */ -#include -#include -#include +#include +#include #include #include @@ -107,7 +106,7 @@ namespace Trace { // // Write the Header to the file // - sprintf( header.magic, "%s", QEMU_TRACE_MAGIC ); + strncpy( header.magic, QEMU_TRACE_MAGIC, sizeof(header.magic) ); header.version = QEMU_TRACE_VERSION; header.kind = QEMU_TRACE_KIND_RAW; // XXX ?? header.sizeof_target_pc = 32; @@ -135,14 +134,15 @@ namespace Trace { // // Loop through log and write each entry. // - struct trace_entry32 entry; - TraceList::ranges_t::iterator itr; - - for (itr = log->Trace.set.begin(); (itr != log->Trace.set.end()); itr++ ){ - entry.pc = itr->lowAddress; - entry.size = itr-> length; - entry.op = TRACE_OP_BLOCK; - switch (itr->exitReason) { + + for (const auto & itr : log->Trace.set) { + struct trace_entry32 entry; + + entry._pad[0] = 0; + entry.pc = itr.lowAddress; + entry.size = itr.length; + entry.op = TRACE_OP_BLOCK; + switch (itr.exitReason) { case TraceList::EXIT_REASON_BRANCH_TAKEN: entry.op |= taken; break; @@ -164,6 +164,7 @@ namespace Trace { status = ::fwrite( &entry, sizeof(entry), 1, traceFile ); if (status != 1) { + ::fclose( traceFile ); std::cerr << "Unable to write entry to " << file << std::endl; return false; } -- cgit v1.2.3