diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2018-05-03 12:53:32 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2018-05-03 12:53:57 +0200 |
commit | b62b437acd4429ffe016187d2c817fbf73264beb (patch) | |
tree | e53831cbe5c440385466af45ac9244ea77066693 | |
parent | 11adab39e6019935aa3abe1d8b3cb64cfc1472ce (diff) | |
parent | 0bd4cd398b19c2ef90e2f39b40a60b9fa915d2b2 (diff) |
Merge #13148: logging: Fix potential use-after-free in LogPrintStr(...)
0bd4cd3 logging: remove unused return value from LogPrintStr (practicalswift)
76f344d logging: Fix potential use-after-free in LogPrintStr(...) (practicalswift)
Pull request description:
Fix potential use-after-free in `LogPrintStr(...)`.
`freopen(…)` frees `m_fileout`.
Tree-SHA512: ceee1f659c10a21525aa648377afeea0a37016339f5269dea54850ba3b475aa316f4931081655717b65f981598fdc9d79a1e79e55f7084c242eeb7bf372bc4b6
-rw-r--r-- | src/logging.cpp | 17 | ||||
-rw-r--r-- | src/logging.h | 2 |
2 files changed, 9 insertions, 10 deletions
diff --git a/src/logging.cpp b/src/logging.cpp index 10a3b18958..60d418fdb5 100644 --- a/src/logging.cpp +++ b/src/logging.cpp @@ -198,15 +198,13 @@ std::string BCLog::Logger::LogTimestampStr(const std::string &str) return strStamped; } -int BCLog::Logger::LogPrintStr(const std::string &str) +void BCLog::Logger::LogPrintStr(const std::string &str) { - int ret = 0; // Returns total number of characters written - std::string strTimestamped = LogTimestampStr(str); if (m_print_to_console) { // print to console - ret = fwrite(strTimestamped.data(), 1, strTimestamped.size(), stdout); + fwrite(strTimestamped.data(), 1, strTimestamped.size(), stdout); fflush(stdout); } if (m_print_to_file) { @@ -214,7 +212,6 @@ int BCLog::Logger::LogPrintStr(const std::string &str) // buffer if we haven't opened the log yet if (m_fileout == nullptr) { - ret = strTimestamped.length(); m_msgs_before_open.push_back(strTimestamped); } else @@ -222,14 +219,16 @@ int BCLog::Logger::LogPrintStr(const std::string &str) // reopen the log file, if requested if (m_reopen_file) { m_reopen_file = false; - if (fsbridge::freopen(m_file_path,"a",m_fileout) != nullptr) - setbuf(m_fileout, nullptr); // unbuffered + m_fileout = fsbridge::freopen(m_file_path, "a", m_fileout); + if (!m_fileout) { + return; + } + setbuf(m_fileout, nullptr); // unbuffered } - ret = FileWriteStr(strTimestamped, m_fileout); + FileWriteStr(strTimestamped, m_fileout); } } - return ret; } void BCLog::Logger::ShrinkDebugFile() diff --git a/src/logging.h b/src/logging.h index 1f2be6016a..6400b131c2 100644 --- a/src/logging.h +++ b/src/logging.h @@ -86,7 +86,7 @@ namespace BCLog { std::atomic<bool> m_reopen_file{false}; /** Send a string to the log output */ - int LogPrintStr(const std::string &str); + void LogPrintStr(const std::string &str); /** Returns whether logs will be written to any output */ bool Enabled() const { return m_print_to_console || m_print_to_file; } |