aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2018-05-03 12:53:32 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2018-05-03 12:53:57 +0200
commitb62b437acd4429ffe016187d2c817fbf73264beb (patch)
treee53831cbe5c440385466af45ac9244ea77066693
parent11adab39e6019935aa3abe1d8b3cb64cfc1472ce (diff)
parent0bd4cd398b19c2ef90e2f39b40a60b9fa915d2b2 (diff)
downloadbitcoin-b62b437acd4429ffe016187d2c817fbf73264beb.tar.xz
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.cpp17
-rw-r--r--src/logging.h2
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; }