mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-20 10:38:42 +01:00
Merge #17762: net: Log to net category for exceptions in ProcessMessages
4bdd68f301
Add missing typeinfo includes (Wladimir J. van der Laan)4d88c3dcb6
net: Log to net category for exceptions in ProcessMessages (Wladimir J. van der Laan) Pull request description: Remove the forest of special exceptions based on string matching, and simply log a short message to the NET logging category when an exception happens during packet processing. It is not good to panick end users with verbose errors (let alone writing to stderr) when any peer can generate them. ACKs for top commit: MarcoFalke: re-ACK4bdd68f301
(only change is adding includes) 🕕 promag: ACK4bdd68f301
, could squash. Tree-SHA512: a005591a3202b005c75e01dfa54249db3992e2f9eefa8b3d9d435acf66130417716ed926ce4e045179cf43788f1abc7362d999750681a9c80b318373d611c366
This commit is contained in:
commit
190a4051fd
@ -29,6 +29,7 @@
|
||||
#include <util/validation.h>
|
||||
|
||||
#include <memory>
|
||||
#include <typeinfo>
|
||||
|
||||
#if defined(NDEBUG)
|
||||
# error "Bitcoin cannot be compiled without assertions."
|
||||
@ -3333,32 +3334,10 @@ bool PeerLogicValidation::ProcessMessages(CNode* pfrom, std::atomic<bool>& inter
|
||||
return false;
|
||||
if (!pfrom->vRecvGetData.empty())
|
||||
fMoreWork = true;
|
||||
}
|
||||
catch (const std::ios_base::failure& e)
|
||||
{
|
||||
if (strstr(e.what(), "end of data")) {
|
||||
// Allow exceptions from under-length message on vRecv
|
||||
LogPrint(BCLog::NET, "%s(%s, %u bytes): Exception '%s' caught, normally caused by a message being shorter than its stated length\n", __func__, SanitizeString(strCommand), nMessageSize, e.what());
|
||||
} else if (strstr(e.what(), "size too large")) {
|
||||
// Allow exceptions from over-long size
|
||||
LogPrint(BCLog::NET, "%s(%s, %u bytes): Exception '%s' caught\n", __func__, SanitizeString(strCommand), nMessageSize, e.what());
|
||||
} else if (strstr(e.what(), "non-canonical ReadCompactSize()")) {
|
||||
// Allow exceptions from non-canonical encoding
|
||||
LogPrint(BCLog::NET, "%s(%s, %u bytes): Exception '%s' caught\n", __func__, SanitizeString(strCommand), nMessageSize, e.what());
|
||||
} else if (strstr(e.what(), "Superfluous witness record")) {
|
||||
// Allow exceptions from illegal witness encoding
|
||||
LogPrint(BCLog::NET, "%s(%s, %u bytes): Exception '%s' caught\n", __func__, SanitizeString(strCommand), nMessageSize, e.what());
|
||||
} else if (strstr(e.what(), "Unknown transaction optional data")) {
|
||||
// Allow exceptions from unknown witness encoding
|
||||
LogPrint(BCLog::NET, "%s(%s, %u bytes): Exception '%s' caught\n", __func__, SanitizeString(strCommand), nMessageSize, e.what());
|
||||
} else {
|
||||
PrintExceptionContinue(&e, "ProcessMessages()");
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e) {
|
||||
PrintExceptionContinue(&e, "ProcessMessages()");
|
||||
} catch (const std::exception& e) {
|
||||
LogPrint(BCLog::NET, "%s(%s, %u bytes): Exception '%s' (%s) caught\n", __func__, SanitizeString(strCommand), nMessageSize, e.what(), typeid(e).name());
|
||||
} catch (...) {
|
||||
PrintExceptionContinue(nullptr, "ProcessMessages()");
|
||||
LogPrint(BCLog::NET, "%s(%s, %u bytes): Unknown exception caught\n", __func__, SanitizeString(strCommand), nMessageSize);
|
||||
}
|
||||
|
||||
if (!fRet) {
|
||||
|
@ -64,6 +64,7 @@
|
||||
#endif
|
||||
|
||||
#include <thread>
|
||||
#include <typeinfo>
|
||||
#include <univalue.h>
|
||||
|
||||
// Application startup time (used for uptime calculation)
|
||||
|
Loading…
Reference in New Issue
Block a user