fixed server crash when receiving malformed NXCP message
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 23 Aug 2016 13:23:27 +0000 (16:23 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 23 Aug 2016 13:23:27 +0000 (16:23 +0300)
ChangeLog
src/libnetxms/msgrecv.cpp

index aa4b1ca..149ebe4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -18,7 +18,7 @@
 - Management console
        - New editors for Agent Config Policy and Log Parser Policy. 
        - DCI summary tables with empty menu path not shown in object context menu
-- Fixed issues: #92, #906, #942, #959, #999, #1006, #1051, #1096, #1100, #1159, #1187, #1191, #1230, #1245, #1237, #1254, #1263
+- Fixed issues: #92, #906, #942, #959, #999, #1006, #1051, #1096, #1100, #1159, #1187, #1191, #1230, #1237, #1245, #1254, #1263, #1273
 
 
 *
index c43fce4..e1676a7 100644 (file)
@@ -57,7 +57,12 @@ NXCPMessage *AbstractMessageReceiver::getMessageFromBuffer(bool *protocolError)
    if (m_dataSize >= NXCP_HEADER_SIZE)
    {
       size_t msgSize = (size_t)ntohl(((NXCP_MESSAGE *)m_buffer)->size);
-      if (msgSize <= m_dataSize)
+      if ((msgSize < NXCP_HEADER_SIZE) || (msgSize % 8 != 0))
+      {
+         // impossible value in message size field, assuming garbage on input
+         *protocolError = true;
+      }
+      else if (msgSize <= m_dataSize)
       {
          if (ntohs(((NXCP_MESSAGE *)m_buffer)->code) == CMD_ENCRYPTED_MESSAGE)
          {