Fix issues found using static code analysis 89/24589/3
authorGeorge Nash <george.nash@intel.com>
Thu, 5 Apr 2018 18:32:14 +0000 (11:32 -0700)
committerMats Wichmann <mats@linux.com>
Sat, 7 Apr 2018 17:07:48 +0000 (17:07 +0000)
Fixed possible issue that the for loop could be
accessing element outside the array. Replaced the
variables holding the size of the array with a
compile time calculation. Removed separate member varaible
use to track the size of the resource type array and
the resource interface array.

Changed the initialization of m_dimmingLightServer from
C++11 initializer list style to C++98 initializer style
due to this causing build failure on gcc/g++ v4.8.4.
Issue reported by Abhishek Pandey

Change-Id: I553e661dbd2e6fa3fe38d8694d88273c5b309c58
Signed-off-by: George Nash <george.nash@intel.com>
resource/examples/ocf_light/BinarySwitchResource.cpp
resource/examples/ocf_light/BinarySwitchResource.h
resource/examples/ocf_light/DimmingLightControl.cpp
resource/examples/ocf_light/DimmingResource.cpp
resource/examples/ocf_light/DimmingResource.h

index 6485bcc..d9b2049 100644 (file)
@@ -33,8 +33,6 @@ using namespace OC;
 namespace PH = std::placeholders;
 
 BinarySwitchResource::BinarySwitchResource(std::string resourceUri):
-        m_nr_resource_types{1},
-        m_nr_resource_interfaces{2},
         m_interestedObservers{},
         m_var_value_rt{},
         m_var_value_n{},
@@ -86,7 +84,7 @@ OCStackResult BinarySwitchResource::registerResource(uint8_t resourceProperty)
     }
 
     // add the additional resource types
-    for( int a = 1; a < m_nr_resource_types; a++ )
+    for( size_t a = 1; a < (sizeof(m_RESOURCE_TYPE)/sizeof(m_RESOURCE_TYPE[0])); a++ )
     {
         result = OCPlatform::bindTypeToResource(m_resourceHandle, m_RESOURCE_TYPE[a].c_str());
         if (OC_STACK_OK != result)
@@ -95,8 +93,9 @@ OCStackResult BinarySwitchResource::registerResource(uint8_t resourceProperty)
             return result;
         }
     }
+
     // add the additional interfaces
-    for( int a = 1; a < m_nr_resource_interfaces; a++)
+    for( size_t a = 1; a < (sizeof(m_RESOURCE_INTERFACE)/sizeof(m_RESOURCE_INTERFACE[0])); a++)
     {
         result = OCPlatform::bindInterfaceToResource(m_resourceHandle, m_RESOURCE_INTERFACE[a].c_str());
         if (OC_STACK_OK != result)
@@ -107,8 +106,10 @@ OCStackResult BinarySwitchResource::registerResource(uint8_t resourceProperty)
     }
 
     std::cout << "BinarySwitchResource:" << std::endl;
-    std::cout << "\t" << "# resource interfaces: " << m_nr_resource_interfaces << std::endl;
-    std::cout << "\t" << "# resource types     : " << m_nr_resource_types << std::endl;
+    std::cout << "\t" << "# resource interfaces: "
+              << (sizeof(m_RESOURCE_INTERFACE)/sizeof(m_RESOURCE_INTERFACE[0])) << std::endl;
+    std::cout << "\t" << "# resource types     : "
+              << (sizeof(m_RESOURCE_TYPE)/sizeof(m_RESOURCE_TYPE[0])) << std::endl;
 
     return result;
 }
index 1575452..b3ddf7f 100644 (file)
@@ -112,8 +112,6 @@ private:
     std::string m_RESOURCE_TYPE[1]; // rt value (as an array)
     std::string m_RESOURCE_INTERFACE[2]; // interface if (as an array)
     std::string m_IF_UPDATE[3]; // updateble interfaces
-    int m_nr_resource_types;
-    int m_nr_resource_interfaces;
     OC::ObservationIds m_interestedObservers;
 
     // member variables for path: /binaryswitch
@@ -140,7 +138,7 @@ protected:
      */
     bool in_updatable_interfaces(std::string interface_name)
     {
-        for (int i=0; i<3; i++)
+        for (size_t i = 0; i < (sizeof(m_IF_UPDATE)/sizeof(m_IF_UPDATE[0])); i++)
         {
             if (m_IF_UPDATE[i].compare(interface_name) == 0)
                 return true;
index b2b2462..965d9fd 100644 (file)
@@ -31,7 +31,7 @@
 
 DimmingLightControl::DimmingLightControl(DimmingLightServer& dimmingLightServer):
     m_quit{false},
-    m_dimmingLightServer{dimmingLightServer}
+    m_dimmingLightServer(dimmingLightServer)
 { }
 
 DimmingLightControl::~DimmingLightControl(void) { }
@@ -132,7 +132,7 @@ void DimmingLightControl::help(void)
             " 'off': turn the light off\n"
             " 'toggle': flip the light value\n"
             " 'dim [0-100]': change the dimming setting\n"
-            " 'info': print current server values"
+            " 'info': print current server values\n"
             " 'quit' or 'q': exit server\n"
             " 'help` or 'h': help\n"
             "**************************************\n";
index 5637e81..78ba6bd 100644 (file)
@@ -31,8 +31,6 @@ using namespace OC;
 namespace PH = std::placeholders;
 
 DimmingResource::DimmingResource(std::string resourceUri):
-        m_nr_resource_types{1},
-        m_nr_resource_interfaces{2},
         m_interestedObservers{},
         m_var_value_dimmingSetting{100},
         m_var_value_n{},
@@ -84,7 +82,7 @@ OCStackResult DimmingResource::registerResource(uint8_t resourceProperty)
     }
 
     /// add the additional resource types
-    for( int a = 1; a < m_nr_resource_types; a++ )
+    for( size_t a = 1; a < (sizeof(m_RESOURCE_TYPE)/sizeof(m_RESOURCE_TYPE[0])); a++ )
     {
         result = OCPlatform::bindTypeToResource(m_resourceHandle, m_RESOURCE_TYPE[a].c_str());
         if (OC_STACK_OK != result)
@@ -93,8 +91,9 @@ OCStackResult DimmingResource::registerResource(uint8_t resourceProperty)
             return result;
         }
     }
+
     // add the additional interfaces
-    for( int a = 1; a < m_nr_resource_interfaces; a++)
+    for( size_t a = 1; a < (sizeof(m_RESOURCE_INTERFACE)/sizeof(m_RESOURCE_INTERFACE[0])); a++)
     {
         result = OCPlatform::bindInterfaceToResource(m_resourceHandle, m_RESOURCE_INTERFACE[a].c_str());
         if (OC_STACK_OK != result)
@@ -105,8 +104,10 @@ OCStackResult DimmingResource::registerResource(uint8_t resourceProperty)
     }
 
     std::cout << "DimmingResource:" << std::endl;
-    std::cout << "\t" << "# resource interfaces: " << m_nr_resource_interfaces << std::endl;
-    std::cout << "\t" << "# resource types     : " << m_nr_resource_types << std::endl;
+    std::cout << "\t" << "# resource interfaces: "
+              << (sizeof(m_RESOURCE_INTERFACE)/sizeof(m_RESOURCE_INTERFACE[0])) << std::endl;
+    std::cout << "\t" << "# resource types     : "
+              << (sizeof(m_RESOURCE_TYPE)/sizeof(m_RESOURCE_TYPE[0])) << std::endl;
 
     return result;
 }
index 5a48e9e..7d93b0b 100644 (file)
@@ -106,9 +106,7 @@ private:
     std::string m_resourceUri;
     std::string m_RESOURCE_TYPE[1]; // rt value (as an array)
     std::string m_RESOURCE_INTERFACE[2]; // interface if (as an array)
-    std::string m_IF_UPDATE[3]; // updateble interfaces
-    int m_nr_resource_types;
-    int m_nr_resource_interfaces;
+    std::string m_IF_UPDATE[3]; // updatable interfaces
     OC::ObservationIds m_interestedObservers;
 
     // member variables for path: /dimming
@@ -136,7 +134,7 @@ protected:
      */
     bool in_updatable_interfaces(std::string interface_name)
     {
-        for (int i=0; i<3; i++)
+        for (size_t i = 0; i < (sizeof(m_IF_UPDATE)/sizeof(m_IF_UPDATE[0])); i++)
         {
             if (m_IF_UPDATE[i].compare(interface_name) == 0)
                 return true;