[IOT-2441] Initialize OCByteString.
authorTodd Malsbary <todd.malsbary@intel.com>
Thu, 22 Jun 2017 17:05:25 +0000 (10:05 -0700)
committerDan Mihai <Daniel.Mihai@microsoft.com>
Fri, 30 Jun 2017 17:11:54 +0000 (17:11 +0000)
OCByteStringCopy tries to free any existing
buffer.  When OCByteString is not initialized it
is possible to free an invalid pointer.

Bug: https://jira.iotivity.org/browse/IOT-2441
Change-Id: Ic5ebf559f4a33ffed7864163238bb304342b794a
Signed-off-by: Todd Malsbary <todd.malsbary@intel.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/20959
Tested-by: jenkins-iotivity <jenkins@iotivity.org>
Reviewed-by: Dan Mihai <Daniel.Mihai@microsoft.com>
resource/csdk/stack/include/ocpayload.h
resource/csdk/stack/src/ocpayload.c
service/notification/src/consumer/NSConsumerCommon.c

index 614a69b..a674517 100644 (file)
@@ -295,7 +295,7 @@ char* OC_CALL OCCreateString(const OCStringLL* ll);
 
 /**
  * This function copies contents (and allocates if necessary)
- * @param dest existing bytestring (or null to allocate here)
+ * @param dest existing bytestring.  The existing contents will be OICFree()'d.
  * @param source existing bytestring
  * @return true of success false on any errors
  **/
index 6012f90..7eb6832 100644 (file)
@@ -176,7 +176,7 @@ static void OC_CALL OCCopyPropertyValueArray(OCRepPayloadValue* dest, OCRepPaylo
             }
             break;
         case OCREP_PROP_BYTE_STRING:
-            dest->arr.ocByteStrArray = (OCByteString*)OICMalloc(dimTotal * sizeof(OCByteString));
+            dest->arr.ocByteStrArray = (OCByteString*)OICCalloc(dimTotal, sizeof(OCByteString));
             VERIFY_PARAM_NON_NULL(TAG, dest->arr.ocByteStrArray, "Failed allocating memory");
             for (size_t i = 0; i < dimTotal; ++i)
             {
@@ -1554,13 +1554,9 @@ char* OC_CALL OCCreateString(const OCStringLL* ll)
 
 bool OC_CALL OCByteStringCopy(OCByteString* dest, const OCByteString* source)
 {
-    VERIFY_PARAM_NON_NULL(TAG, source, "Bad input");
+    VERIFY_PARAM_NON_NULL(TAG, dest, "Bad dest");
+    VERIFY_PARAM_NON_NULL(TAG, source, "Bad source");
 
-    if (!dest)
-    {
-        dest = (OCByteString *)OICMalloc(sizeof(OCByteString));
-        VERIFY_PARAM_NON_NULL(TAG, dest, "Failed allocating memory");
-    }
     if (dest->bytes)
     {
         OICFree(dest->bytes);
index 89dbdb8..1fe086a 100644 (file)
@@ -901,7 +901,7 @@ void NSCopyPayloadValueArray(OCRepPayloadValue* dest, OCRepPayloadValue* source)
             }
             break;
         case OCREP_PROP_BYTE_STRING:
-            dest->arr.ocByteStrArray = (OCByteString*)OICMalloc(dimTotal * sizeof(OCByteString));
+            dest->arr.ocByteStrArray = (OCByteString*)OICCalloc(dimTotal, sizeof(OCByteString));
             NS_VERIFY_NOT_NULL_V(dest->arr.ocByteStrArray);
             for (size_t i = 0; i < dimTotal; ++i)
             {