Force disconnect on checksum or format errors
authorCryptoManiac <balthazar.ad@gmail.com>
Tue, 28 Dec 2021 08:29:23 +0000 (11:29 +0300)
committerCryptoManiac <balthazar.ad@gmail.com>
Tue, 28 Dec 2021 08:29:23 +0000 (11:29 +0300)
src/main.cpp
src/net.cpp

index 7b55326..c9bd58d 100644 (file)
@@ -3851,7 +3851,7 @@ bool ProcessMessages(CNode* pfrom)
         if (!hdr.IsValid())
         {
             printf("\n\nPROCESSMESSAGE: ERRORS IN HEADER %s\n\n\n", hdr.GetCommand().c_str());
-            continue;
+            return false;
         }
         string strCommand = hdr.GetCommand();
 
@@ -3877,7 +3877,7 @@ bool ProcessMessages(CNode* pfrom)
         {
             printf("ProcessMessages(%s, %u bytes) : CHECKSUM ERROR nChecksum=%08x hdr.nChecksum=%08x\n",
                strCommand.c_str(), nMessageSize, nChecksum, hdr.nChecksum);
-            continue;
+            return false;
         }
 
         // Copy message to its own buffer
@@ -3918,8 +3918,10 @@ bool ProcessMessages(CNode* pfrom)
             PrintExceptionContinue(NULL, "ProcessMessages()");
         }
 
-        if (!fRet)
+        if (!fRet) {
             printf("ProcessMessage(%s, %u bytes) FAILED\n", strCommand.c_str(), nMessageSize);
+            return false;
+        }
     }
 
     vRecv.Compact();
index 9ae84ac..64695a0 100644 (file)
@@ -1531,8 +1531,13 @@ void ThreadMessageHandler2(void* parg)
             // Receive messages
             {
                 TRY_LOCK(pnode->cs_vRecv, lockRecv);
-                if (lockRecv)
-                    ProcessMessages(pnode);
+                if (lockRecv) {
+                    if (!ProcessMessages(pnode)) {
+                        pnode->CloseSocketDisconnect();
+                        if (pnode == pnodeSync)
+                            fHaveSyncNode = false;
+                    }
+                }
             }
             if (fShutdown)
                 return;