fixed various clang static analyzer warnings
authorVictor Kirhenshtein <victor@netxms.org>
Sat, 14 May 2016 15:54:54 +0000 (18:54 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Sat, 14 May 2016 15:54:54 +0000 (18:54 +0300)
18 files changed:
src/agent/core/snmptrapproxy.cpp
src/agent/subagents/ds18x20/ds18x20.cpp
src/db/dbdrv/odbc/odbc.cpp
src/libnetxms/sha1.cpp
src/libnxlp/file.cpp
src/libnxsl/functions.cpp
src/server/core/alarm.cpp
src/server/core/np.cpp
src/server/core/nxsl_classes.cpp
src/server/core/radius.cpp
src/server/core/schedule.cpp
src/server/core/svccontainer.cpp
src/server/include/nms_script.h
src/server/tools/nxadm/nxadm.cpp
src/server/tools/nxdbmgr/check.cpp
src/server/tools/nxdbmgr/unlock.cpp
src/server/tools/nxdbmgr/upgrade.cpp
src/snmp/libnxsnmp/util.cpp

index 982db76..2c1598e 100644 (file)
@@ -1,6 +1,6 @@
 /*
 ** NetXMS multiplatform core agent
-** Copyright (C) 2014 Raden Solutions
+** Copyright (C) 2014-2016 Raden Solutions
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
@@ -51,19 +51,22 @@ void ShutdownSNMPTrapSender()
  */
 THREAD_RESULT THREAD_CALL SNMPTrapReceiver(void *pArg)
 {
-   SOCKET hSocket = (g_dwFlags & AF_DISABLE_IPV4) ? INVALID_SOCKET : socket(AF_INET, SOCK_DGRAM, 0);
-   if ((hSocket == INVALID_SOCKET) && !(g_dwFlags & AF_DISABLE_IPV4))
+   if (g_dwFlags & AF_DISABLE_IPV4)
    {
-      DebugPrintf(INVALID_INDEX, 1, _T("SNMPTrapReceiver: cannot create socket (%s)"), _tcserror(errno));
+      nxlog_debug(1, _T("SNMPTrapReceiver: IPv4 disabled, exiting"));
       return THREAD_OK;
    }
 
-   if (!(g_dwFlags & AF_DISABLE_IPV4))
+   SOCKET hSocket = socket(AF_INET, SOCK_DGRAM, 0);
+   if (hSocket == INVALID_SOCKET)
    {
-      SetSocketExclusiveAddrUse(hSocket);
-      SetSocketReuseFlag(hSocket);
+      DebugPrintf(INVALID_INDEX, 1, _T("SNMPTrapReceiver: cannot create socket (%s)"), _tcserror(errno));
+      return THREAD_OK;
    }
 
+   SetSocketExclusiveAddrUse(hSocket);
+   SetSocketReuseFlag(hSocket);
+
    // Fill in local address structure
    struct sockaddr_in addr;
    memset(&addr, 0, sizeof(struct sockaddr_in));
@@ -90,17 +93,10 @@ THREAD_RESULT THREAD_CALL SNMPTrapReceiver(void *pArg)
    addr.sin_port = htons(g_dwSNMPTrapPort);
 
    // Bind socket
-   if (!(g_dwFlags & AF_DISABLE_IPV4))
-   {
-      if (bind(hSocket, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) != 0)
-      {
-         DebugPrintf(INVALID_INDEX, 1, _T("SNMPTrapReceiver: cannot bind socket (%s)"), _tcserror(errno));
-         closesocket(hSocket);
-         return THREAD_OK;
-      }
-   }
-   else
+   if (bind(hSocket, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) != 0)
    {
+      DebugPrintf(INVALID_INDEX, 1, _T("SNMPTrapReceiver: cannot bind socket (%s)"), _tcserror(errno));
+      closesocket(hSocket);
       return THREAD_OK;
    }
 
@@ -108,14 +104,9 @@ THREAD_RESULT THREAD_CALL SNMPTrapReceiver(void *pArg)
    DebugPrintf(INVALID_INDEX, 3, _T("SNMPTrapReceiver: listening on %s:%d"),
       IpToStr(ntohl(addr.sin_addr.s_addr), ipAddrStr), (int)ntohs(addr.sin_port));
 
-   SNMP_TrapProxyTransport *pTransport; //rewrite class to support
-
-   if (!(g_dwFlags & AF_DISABLE_IPV4))
-   {
-      pTransport = new SNMP_TrapProxyTransport(hSocket);
-      pTransport->enableEngineIdAutoupdate(true);
-      pTransport->setPeerUpdatedOnRecv(true);
-   }
+   SNMP_TrapProxyTransport *pTransport = new SNMP_TrapProxyTransport(hSocket);
+   pTransport->enableEngineIdAutoupdate(true);
+   pTransport->setPeerUpdatedOnRecv(true);
 
    // Wait for packets
    while(!(g_dwFlags & AF_SHUTDOWN))
index 0e252f8..4ca9fea 100644 (file)
@@ -1,6 +1,6 @@
 /*
 ** NetXMS DS18x20 sensor subagent
-** Copyright (C) 2004-2015 Victor Kirhenshtein
+** Copyright (C) 2004-2016 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
@@ -114,7 +114,7 @@ static BOOL SubagentInit(Config *config)
                {
                        TCHAR *pItem, *pEnd;
 
-                       for(pItem = s_sensorList; *pItem != 0; pItem = pEnd + 1)
+                       for(pItem = pEnd = s_sensorList; pEnd != NULL; pItem = pEnd + 1)
                        {
                                pEnd = _tcschr(pItem, _T('\n'));
                                if (pEnd != NULL)
index 8d08567..8327824 100644 (file)
@@ -1024,7 +1024,7 @@ extern "C" DBDRV_UNBUFFERED_RESULT EXPORT DrvSelectPreparedUnbuffered(ODBCDRV_CO
       pResult->numColumns = wNumCols;
       pResult->pConn = pConn;
       pResult->noMoreRows = false;
-               pResult->values = (NETXMS_WCHAR **)malloc(sizeof(WCHAR *) * pResult->numColumns);
+               pResult->values = (NETXMS_WCHAR **)malloc(sizeof(NETXMS_WCHAR *) * pResult->numColumns);
       memset(pResult->values, 0, sizeof(NETXMS_WCHAR *) * pResult->numColumns);
 
                // Get column names
index 1923572..e61fbd0 100644 (file)
@@ -230,7 +230,6 @@ unsigned char finalcount[8];
          ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
     }
     /* Wipe variables */
-    i = 0;     /* JHB */
 #ifdef _WIN32
     SecureZeroMemory(context->buffer, 64);
     SecureZeroMemory(context->state, 20);
index 517e586..6c912fd 100644 (file)
@@ -1,7 +1,7 @@
 /*
 ** NetXMS - Network Management System
 ** Log Parsing Library
-** Copyright (C) 2003-2014 Victor Kirhenshtein
+** Copyright (C) 2003-2016 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU Lesser General Public License as published by
@@ -274,7 +274,6 @@ bool LogParser::monitorFile(CONDITION stopCondition, bool readFromCurrPos)
                                {
                                        LogParserTrace(5, _T("LogParser: parsing existing records in file \"%s\""), fname);
                                        ParseNewRecords(this, fh);
-                                       readFromStart = false;
                                }
                                else
                                {
index cb07e7b..1400bb4 100644 (file)
@@ -1,7 +1,7 @@
 /* 
 ** NetXMS - Network Management System
 ** NetXMS Scripting Language Interpreter
-** Copyright (C) 2003-2015 Victor Kirhenshtein
+** Copyright (C) 2003-2016 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU Lesser General Public License as published by
@@ -705,11 +705,6 @@ int F_ord(int argc, NXSL_Value **argv, NXSL_Value **result, NXSL_VM *vm)
  */
 int F_left(int argc, NXSL_Value **argv, NXSL_Value **ppResult, NXSL_VM *vm)
 {
-       const TCHAR *str;
-       TCHAR *newStr, pad;
-       LONG newLen;
-       UINT32 i, len;
-
    if ((argc < 2) || (argc > 3))
       return NXSL_ERR_INVALID_ARGUMENT_COUNT;
 
@@ -720,46 +715,45 @@ int F_left(int argc, NXSL_Value **argv, NXSL_Value **ppResult, NXSL_VM *vm)
                 ((argc == 3) && (!argv[2]->isString())))
                return NXSL_ERR_NOT_STRING;
 
-       if (argc == 3)
+       int newLen = argv[1]->getValueAsInt32();
+       if (newLen > 0)
        {
-               pad = *(argv[2]->getValueAsCString());
-               if (pad == 0)
-                       pad = _T(' ');
+          TCHAR pad;
+          if (argc == 3)
+          {
+             pad = *(argv[2]->getValueAsCString());
+             if (pad == 0)
+                pad = _T(' ');
+          }
+          else
+          {
+             pad = _T(' ');
+          }
+
+          UINT32 len;
+      const TCHAR *str = argv[0]->getValueAsString(&len);
+      if (len > (UINT32)newLen)
+         len = (UINT32)newLen;
+      TCHAR *newStr = (TCHAR *)malloc(newLen * sizeof(TCHAR));
+      memcpy(newStr, str, len * sizeof(TCHAR));
+      for(UINT32 i = len; i < (UINT32)newLen; i++)
+         newStr[i] = pad;
+      *ppResult = new NXSL_Value(newStr, newLen);
+      free(newStr);
        }
        else
        {
-               pad = _T(' ');
+          *ppResult = new NXSL_Value(_T(""));
        }
-
-       newLen = argv[1]->getValueAsInt32();
-       if (newLen < 0)
-               newLen = 0;
-
-   str = argv[0]->getValueAsString(&len);
-       if (len > (UINT32)newLen)
-               len = (UINT32)newLen;
-       newStr = (TCHAR *)malloc(newLen * sizeof(TCHAR));
-       memcpy(newStr, str, len * sizeof(TCHAR));
-   for(i = len; i < (UINT32)newLen; i++)
-      newStr[i] = pad;
-   *ppResult = new NXSL_Value(newStr, newLen);
-       free(newStr);
        return NXSL_ERR_SUCCESS;
 }
 
-
-//
-// right() - take rightmost part of a string and pad or truncate it as necessary
-// Format: right(string, len, [pad])
-//
-
+/**
+ * right() - take rightmost part of a string and pad or truncate it as necessary
+ * Format: right(string, len, [pad])
+ */
 int F_right(int argc, NXSL_Value **argv, NXSL_Value **ppResult, NXSL_VM *vm)
 {
-       const TCHAR *str;
-       TCHAR *newStr, pad;
-       LONG newLen;
-       UINT32 i, len, shift;
-
    if ((argc < 2) || (argc > 3))
       return NXSL_ERR_INVALID_ARGUMENT_COUNT;
 
@@ -770,37 +764,43 @@ int F_right(int argc, NXSL_Value **argv, NXSL_Value **ppResult, NXSL_VM *vm)
                 ((argc == 3) && (!argv[2]->isString())))
                return NXSL_ERR_NOT_STRING;
 
-       if (argc == 3)
-       {
-               pad = *(argv[2]->getValueAsCString());
-               if (pad == 0)
-                       pad = _T(' ');
-       }
-       else
-       {
-               pad = _T(' ');
-       }
-
-       newLen = argv[1]->getValueAsInt32();
-       if (newLen < 0)
-               newLen = 0;
+   int newLen = argv[1]->getValueAsInt32();
+   if (newLen > 0)
+   {
+      TCHAR pad;
+      if (argc == 3)
+      {
+         pad = *(argv[2]->getValueAsCString());
+         if (pad == 0)
+            pad = _T(' ');
+      }
+      else
+      {
+         pad = _T(' ');
+      }
 
-   str = argv[0]->getValueAsString(&len);
-       if (len > (UINT32)newLen)
-       {
-               shift = len - (UINT32)newLen;
-               len = (UINT32)newLen;
-       }
-       else
-       {
-               shift = 0;
-       }
-       newStr = (TCHAR *)malloc(newLen * sizeof(TCHAR));
-       memcpy(&newStr[(UINT32)newLen - len], &str[shift], len * sizeof(TCHAR));
-   for(i = 0; i < (UINT32)newLen - len; i++)
-      newStr[i] = pad;
-   *ppResult = new NXSL_Value(newStr, newLen);
-       free(newStr);
+      UINT32 len, shift;
+      const TCHAR *str = argv[0]->getValueAsString(&len);
+      if (len > (UINT32)newLen)
+      {
+         shift = len - (UINT32)newLen;
+         len = (UINT32)newLen;
+      }
+      else
+      {
+         shift = 0;
+      }
+      TCHAR *newStr = (TCHAR *)malloc(newLen * sizeof(TCHAR));
+      memcpy(&newStr[(UINT32)newLen - len], &str[shift], len * sizeof(TCHAR));
+      for(UINT32 i = 0; i < (UINT32)newLen - len; i++)
+         newStr[i] = pad;
+      *ppResult = new NXSL_Value(newStr, newLen);
+      free(newStr);
+   }
+   else
+   {
+      *ppResult = new NXSL_Value(_T(""));
+   }
        return 0;
 }
 
index 1503f58..32a0031 100644 (file)
@@ -710,7 +710,6 @@ void NXCORE_EXPORTABLE ResolveAlarmByKey(const TCHAR *pszKey, bool useRegexp, bo
    UINT32 *pdwObjectList = (UINT32 *)malloc(sizeof(UINT32) * m_alarmList->size());
 
    MutexLock(m_mutex);
-   DWORD dwCurrTime = (UINT32)time(NULL);
    int numObjects = 0;
    for(int i = 0; i < m_alarmList->size(); i++)
    {
index 07c6dad..b0949bc 100644 (file)
@@ -1,6 +1,6 @@
 /*
 ** NetXMS - Network Management System
-** Copyright (C) 2003-2013 Victor Kirhenshtein
+** Copyright (C) 2003-2016 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
index e1cf4b4..582d44a 100644 (file)
@@ -790,24 +790,46 @@ NXSL_Value *NXSL_MobileDeviceClass::getAttr(NXSL_Object *object, const TCHAR *at
 }
 
 /**
- * NXSL class Cluster: constructor
+ * NXSL class "Cluster" constructor
  */
-NXSL_ClusetClass::NXSL_ClusetClass() : NXSL_NetObjClass()
+NXSL_ClusterClass::NXSL_ClusterClass() : NXSL_NetObjClass()
 {
    _tcscpy(m_name, _T("Cluster"));
 }
 
 /**
- * NXSL class Cluster: get attribute
+ * NXSL class "Cluster" attributes
  */
-NXSL_Value *NXSL_ClusetClass::getAttr(NXSL_Object *object, const TCHAR *attr)
+NXSL_Value *NXSL_ClusterClass::getAttr(NXSL_Object *object, const TCHAR *attr)
 {
    NXSL_Value *value = NXSL_NetObjClass::getAttr(object, attr);
    if (value != NULL)
       return value;
 
    Cluster *cluster = (Cluster *)object->getData();
-   // TODO: Declare possible attrs
+   if (!_tcscmp(attr, _T("zone")))
+   {
+      if (g_flags & AF_ENABLE_ZONING)
+      {
+         Zone *zone = FindZoneByGUID(cluster->getZoneId());
+         if (zone != NULL)
+         {
+            value = new NXSL_Value(new NXSL_Object(&g_nxslZoneClass, zone));
+         }
+         else
+         {
+            value = new NXSL_Value;
+         }
+      }
+      else
+      {
+         value = new NXSL_Value;
+      }
+   }
+   else if (!_tcscmp(attr, _T("zoneId")))
+   {
+      value = new NXSL_Value(cluster->getZoneId());
+   }
    return value;
 }
 
@@ -1226,7 +1248,7 @@ NXSL_AlarmClass g_nxslAlarmClass;
 NXSL_DciClass g_nxslDciClass;
 NXSL_EventClass g_nxslEventClass;
 NXSL_InterfaceClass g_nxslInterfaceClass;
-NXSL_ClusetClass g_nxslClusterClass;
+NXSL_ClusterClass g_nxslClusterClass;
 NXSL_MobileDeviceClass g_nxslMobileDeviceClass;
 NXSL_NetObjClass g_nxslNetObjClass;
 NXSL_NodeClass g_nxslNodeClass;
index 3d4af8b..6a1f0ff 100644 (file)
@@ -547,7 +547,6 @@ static int rad_build_packet(AUTH_HDR *auth, int auth_len,
                        *ptr++ = PW_REPLY_MESSAGE;
                        *ptr++ = len + 2;
                        memcpy(ptr, msg, len);
-                       ptr += len;
                        total_length += len + 2;
                }
        }
index 271e599..f6fa3f4 100644 (file)
@@ -355,7 +355,7 @@ UINT32 UpdateScheduledTask(int id, const TCHAR *task, const TCHAR *schedule, con
    }
    MutexUnlock(s_cronScheduleLock);
 
-   if(!found)
+   if (!found)
    {
       //check in different que and if exists - remove from one and add to another
       MutexLock(s_oneTimeScheduleLock);
@@ -378,7 +378,6 @@ UINT32 UpdateScheduledTask(int id, const TCHAR *task, const TCHAR *schedule, con
             s_cronSchedules.add(st);
             MutexUnlock(s_cronScheduleLock);
 
-            found = true;
             break;
          }
       }
@@ -735,7 +734,7 @@ static bool IsTimeToRun(struct tm *currTime, const TCHAR *schedule, time_t currT
       return false;
 
    // Day of week
-   curr = ExtractWord(curr, value);
+   ExtractWord(curr, value);
    for(int i = 0; value[i] != 0; i++)
       if (value[i] == _T('7'))
          value[i] = _T('0');
index 1ce4e2a..18edb82 100644 (file)
@@ -1,6 +1,6 @@
 /*
 ** NetXMS - Network Management System
-** Copyright (C) 2003-2013 Raden Solutions
+** Copyright (C) 2003-2016 Raden Solutions
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
@@ -348,14 +348,13 @@ void ServiceContainer::updateUptimeStats(time_t currentTime, BOOL updateChilds)
 INT32 ServiceContainer::getSecondsSinceBeginningOf(Period period, time_t *beginTime)
 {
        time_t curTime = time(NULL);
-       struct tm *tms;
        struct tm tmBuffer;
 
 #if HAVE_LOCALTIME_R
-       tms = localtime_r(&curTime, &tmBuffer);
+       localtime_r(&curTime, &tmBuffer);
 #else
-       tms = localtime(&curTime);
-       memcpy((void*)&tmBuffer, (void*)tms, sizeof(struct tm));
+       struct tm *tms = localtime(&curTime);
+       memcpy(&tmBuffer, tms, sizeof(struct tm));
 #endif
 
        tmBuffer.tm_hour = 0;
index cc21101..4145fe2 100644 (file)
@@ -70,10 +70,10 @@ public:
 /**
  * NXSL "Cluster" class
  */
-class NXSL_ClusetClass : public NXSL_NetObjClass
+class NXSL_ClusterClass : public NXSL_NetObjClass
 {
 public:
-   NXSL_ClusetClass();
+   NXSL_ClusterClass();
 
    virtual NXSL_Value *getAttr(NXSL_Object *object, const TCHAR *attr);
 };
@@ -206,7 +206,7 @@ extern NXSL_AlarmClass g_nxslAlarmClass;
 extern NXSL_DciClass g_nxslDciClass;
 extern NXSL_EventClass g_nxslEventClass;
 extern NXSL_InterfaceClass g_nxslInterfaceClass;
-extern NXSL_ClusetClass g_nxslClusterClass;
+extern NXSL_ClusterClass g_nxslClusterClass;
 extern NXSL_MobileDeviceClass g_nxslMobileDeviceClass;
 extern NXSL_NetObjClass g_nxslNetObjClass;
 extern NXSL_NodeClass g_nxslNodeClass;
index 5ff3a9f..88f28cf 100644 (file)
@@ -183,6 +183,7 @@ int main(int argc, char *argv[])
             case 'h':
                Help();
                bStart = FALSE;
+               iError = 0;
                break;
             case 'c':
 #ifdef UNICODE
index a00276c..82332b6 100644 (file)
@@ -240,11 +240,6 @@ static void CheckZones()
                      m_iNumFixes++;
                }
             }
-            else
-            {
-               DBGetField(hResult2, 0, 0, szName, MAX_OBJECT_NAME);
-               bIsDeleted = DBGetFieldLong(hResult2, 0, 1) ? TRUE : FALSE;
-            }
             DBFreeResult(hResult2);
          }
       }
@@ -261,7 +256,7 @@ static void CheckNodes()
    DB_RESULT hResult, hResult2;
    DWORD i, dwNumObjects, dwId;
    TCHAR szQuery[1024], szName[MAX_OBJECT_NAME];
-   BOOL bResult, bIsDeleted;
+   BOOL bResult, bIsDeleted = FALSE;
 
    StartStage(_T("Checking node objects..."));
    hResult = SQLSelect(_T("SELECT id,primary_ip FROM nodes"));
@@ -349,7 +344,6 @@ static void CheckComponents(const TCHAR *pszDisplayName, const TCHAR *pszTable)
    DB_RESULT hResult, hResult2;
    DWORD i, dwNumObjects, dwId;
    TCHAR szQuery[1024], szName[MAX_OBJECT_NAME];
-   BOOL bIsDeleted;
 
    _sntprintf(szQuery, 1024, _T("Checking %s objects..."), pszDisplayName);
    StartStage(szQuery);
@@ -395,7 +389,6 @@ static void CheckComponents(const TCHAR *pszDisplayName, const TCHAR *pszTable)
             else
             {
                DBGetField(hResult2, 0, 0, szName, MAX_OBJECT_NAME);
-               bIsDeleted = DBGetFieldLong(hResult2, 0, 1) ? TRUE : FALSE;
             }
             DBFreeResult(hResult2);
          }
index 3ac22b1..13ceedd 100644 (file)
@@ -1,6 +1,6 @@
 /*
 ** nxdbmgr - NetXMS database manager
-** Copyright (C) 2004, 2005, 2006 Victor Kirhenshtein
+** Copyright (C) 2004-2016 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
@@ -64,7 +64,6 @@ void UnlockDatabase()
       {
          if (SQLQuery(_T("UPDATE config SET var_value='UNLOCKED' where var_name='DBLockStatus'")))
          {
-            bLocked = FALSE;
             _tprintf(_T("Database lock removed\n"));
          }
       }
index 9306aaf..13913eb 100644 (file)
@@ -2619,7 +2619,7 @@ static BOOL H_UpgradeFromV324(int currVersion, int newVersion)
          }
          _tcscat(newConfig, _T("</config>"));
 
-         safe_free(config);
+         free(config);
          DB_STATEMENT statment = DBPrepare(g_hCoreDB, _T("UPDATE network_map_links SET element_data=? WHERE map_id=? AND element1=? AND element2=?"));
          if (statment != NULL)
          {
@@ -2633,9 +2633,9 @@ static BOOL H_UpgradeFromV324(int currVersion, int newVersion)
          else
          {
             if (!g_bIgnoreErrors)
-               return FALSE;
+               return false;
          }
-         safe_free(newConfig);
+         free(newConfig);
       }
       DBFreeResult(hResult);
    }
index 8ff77ba..3520e7b 100644 (file)
@@ -299,7 +299,6 @@ UINT32 LIBNXSNMP_EXPORTABLE SnmpWalk(SNMP_Transport *transport, const UINT32 *ro
                                                 (pVar->getName().compare(pdwName, nameLength) == OID_EQUAL) ||
                                                 (pVar->getName().compare(firstObjectName, firstObjectNameLen) == OID_EQUAL))
                {
-                  bRunning = FALSE;
                   delete pRespPDU;
                   delete pRqPDU;
                   break;