fixed some VS 2017 incompatibilities
authorVictor Kirhenshtein <victor@netxms.org>
Wed, 4 Oct 2017 21:08:51 +0000 (00:08 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Wed, 4 Oct 2017 21:08:51 +0000 (00:08 +0300)
include/nms_common.h
include/nxcpapi.h
src/libnetxms/crypto.cpp
src/libnetxms/message.cpp

index 01f0793..dc8f562 100644 (file)
@@ -52,6 +52,9 @@
 #define NOMINMAX
 #endif
 
+// prevent defining ETIMEDOUT, ECONNRESET, etc. to wrong values
+#define _CRT_NO_POSIX_ERROR_CODES
+
 #endif   /* _WIN32 */
 
 #if HAVE_JEMALLOC_JEMALLOC_H
@@ -176,6 +179,10 @@ typedef int bool;
 #define CPP_COMPILER_VERSION __STR(__BUILD_VERSION_STRING(Microsoft C/C++ Optimizing Compiler Version,_MSC_FULL_VER))
 #endif
 
+// Disable some warnings:
+//   4577 -  'noexcept' used with no exception handling mode specified
+#pragma warning(disable: 4577)
+
 #ifndef _WIN32_WINNT
 #define _WIN32_WINNT           0x0501
 #endif
index 7479907..b4fe33a 100644 (file)
@@ -137,8 +137,8 @@ public:
    double getFieldAsDouble(UINT32 fieldId) const;
    bool getFieldAsBoolean(UINT32 fieldId) const;
    time_t getFieldAsTime(UINT32 fieldId) const;
-   UINT32 getFieldAsInt32Array(UINT32 fieldId, UINT32 numElements, UINT32 *buffer) const;
-   UINT32 getFieldAsInt32Array(UINT32 fieldId, IntegerArray<UINT32> *data) const;
+   size_t getFieldAsInt32Array(UINT32 fieldId, UINT32 numElements, UINT32 *buffer) const;
+   size_t getFieldAsInt32Array(UINT32 fieldId, IntegerArray<UINT32> *data) const;
    const BYTE *getBinaryFieldPtr(UINT32 fieldId, size_t *size) const;
    TCHAR *getFieldAsString(UINT32 fieldId, TCHAR *buffer = NULL, size_t bufferSize = 0) const;
        char *getFieldAsMBString(UINT32 fieldId, char *buffer = NULL, size_t bufferSize = 0) const;
index 859b3c7..e662800 100644 (file)
@@ -608,7 +608,6 @@ NXCPEncryptionContext *NXCPEncryptionContext::create(NXCPMessage *msg, RSA *priv
 {
 #ifdef _WITH_ENCRYPTION
    BYTE ucKeyBuffer[KEY_BUFFER_SIZE], ucSessionKey[KEY_BUFFER_SIZE];
-   UINT32 dwKeySize;
    int nSize;
        NXCPEncryptionContext *ctx = new NXCPEncryptionContext;
 
@@ -620,8 +619,8 @@ NXCPEncryptionContext *NXCPEncryptionContext::create(NXCPMessage *msg, RSA *priv
          ctx->m_sessionKey = (BYTE *)malloc(ctx->m_keyLength);
 
          // Decrypt session key
-         dwKeySize = msg->getFieldAsBinary(VID_SESSION_KEY, ucKeyBuffer, KEY_BUFFER_SIZE);
-         nSize = RSA_private_decrypt(dwKeySize, ucKeyBuffer, ucSessionKey, privateKey, RSA_PKCS1_OAEP_PADDING);
+         int keySize = (int)msg->getFieldAsBinary(VID_SESSION_KEY, ucKeyBuffer, KEY_BUFFER_SIZE);
+         nSize = RSA_private_decrypt(keySize, ucKeyBuffer, ucSessionKey, privateKey, RSA_PKCS1_OAEP_PADDING);
          if (nSize == ctx->m_keyLength)
          {
             memcpy(ctx->m_sessionKey, ucSessionKey, nSize);
@@ -630,8 +629,8 @@ NXCPEncryptionContext *NXCPEncryptionContext::create(NXCPMessage *msg, RSA *priv
             int nIVLen = msg->getFieldAsUInt16(VID_IV_LENGTH);
             if (nIVLen == 0)  // Versions prior to 0.2.13 don't send IV length, assume 16
                nIVLen = 16;
-            dwKeySize = msg->getFieldAsBinary(VID_SESSION_IV, ucKeyBuffer, KEY_BUFFER_SIZE);
-            nSize = RSA_private_decrypt(dwKeySize, ucKeyBuffer, ucSessionKey, privateKey, RSA_PKCS1_OAEP_PADDING);
+            keySize = (int)msg->getFieldAsBinary(VID_SESSION_IV, ucKeyBuffer, KEY_BUFFER_SIZE);
+            nSize = RSA_private_decrypt(keySize, ucKeyBuffer, ucSessionKey, privateKey, RSA_PKCS1_OAEP_PADDING);
             if ((nSize == nIVLen) &&
                 (nIVLen <= EVP_CIPHER_iv_length(s_ciphers[ctx->m_cipher]())))
             {
index 30e290a..fe07ef5 100644 (file)
@@ -1055,11 +1055,11 @@ void NXCPMessage::setFieldFromInt32Array(UINT32 fieldId, const IntegerArray<UINT
 /**
  * get binary field as an array of 32 bit unsigned integers
  */
-UINT32 NXCPMessage::getFieldAsInt32Array(UINT32 fieldId, UINT32 numElements, UINT32 *buffer) const
+size_t NXCPMessage::getFieldAsInt32Array(UINT32 fieldId, UINT32 numElements, UINT32 *buffer) const
 {
-   UINT32 size = getFieldAsBinary(fieldId, (BYTE *)buffer, numElements * sizeof(UINT32));
+   size_t size = getFieldAsBinary(fieldId, (BYTE *)buffer, numElements * sizeof(UINT32));
    size /= sizeof(UINT32);   // Convert bytes to elements
-   for(UINT32 i = 0; i < size; i++)
+   for(size_t i = 0; i < size; i++)
       buffer[i] = ntohl(buffer[i]);
    return size;
 }
@@ -1067,22 +1067,22 @@ UINT32 NXCPMessage::getFieldAsInt32Array(UINT32 fieldId, UINT32 numElements, UIN
 /**
  * get binary field as an array of 32 bit unsigned integers
  */
-UINT32 NXCPMessage::getFieldAsInt32Array(UINT32 fieldId, IntegerArray<UINT32> *data) const
+size_t NXCPMessage::getFieldAsInt32Array(UINT32 fieldId, IntegerArray<UINT32> *data) const
 {
    data->clear();
 
    UINT32 *value = (UINT32 *)get(fieldId, NXCP_DT_BINARY);
    if (value != NULL)
    {
-      UINT32 size = *value / sizeof(UINT32);
+      size_t size = *value / sizeof(UINT32);
       value++;
-      for(UINT32 i = 0; i < size; i++)
+      for(size_t i = 0; i < size; i++)
       {
          data->add(ntohl(*value));
          value++;
       }
    }
-   return (UINT32)data->size();
+   return data->size();
 }
 
 /**