Fix parameter checking in BinaryQueue 38/234238/8
authorZofia Abramowska <z.abramowska@samsung.com>
Fri, 22 May 2020 10:13:58 +0000 (12:13 +0200)
committerZofia Abramowska <z.abramowska@samsung.com>
Thu, 9 Jul 2020 14:08:29 +0000 (16:08 +0200)
* check raw pointers for nullptr
* check for empty buckets in all methods
* don't perform redundant checks in Bucket class

Change-Id: Ia5607df736460881aea5e8b1020ab6c5391b22d4

src/common/containers/BinaryQueue.cpp

index 9a4afbac926d55806e4429b949e83b38c1e13c4c..e7cc407cb280606f9e01bc81e4165fd19f150ef3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2014 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2011-2020 Samsung Electronics Co., Ltd All Rights Reserved
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@
  */
 
 #include <algorithm>
+#include <cassert>
 #include <cstring>
 #include <malloc.h>
 #include <new>
@@ -98,6 +99,14 @@ void BinaryQueue::clear() {
 }
 
 void BinaryQueue::appendCopy(const void* buffer, size_t bufferSize) {
+    // Do not attach empty buckets
+    if (bufferSize == 0) {
+        return;
+    }
+
+    if (buffer == nullptr)
+        throw NullPointerException("buffer");
+
     // Create data copy with malloc/free
     void *bufferCopy = malloc(bufferSize);
 
@@ -123,12 +132,21 @@ void BinaryQueue::appendUnmanaged(const void* buffer,
                                   size_t bufferSize,
                                   BufferDeleter deleter,
                                   void* userParam) {
+
+    if (deleter == nullptr) {
+        throw NullPointerException("deleter");
+    }
+
     // Do not attach empty buckets
     if (bufferSize == 0) {
         deleter(buffer, bufferSize, userParam);
         return;
     }
 
+    if (buffer == nullptr) {
+        throw NullPointerException("buffer");
+    }
+
     // Just add new bucket with selected deleter
     Bucket *bucket = new Bucket(buffer, bufferSize, deleter, userParam);
     try {
@@ -182,6 +200,10 @@ void BinaryQueue::flatten(void *buffer, size_t bufferSize) const {
         return;
     }
 
+    if (buffer == nullptr) {
+        throw NullPointerException("buffer");
+    }
+
     if (bufferSize > m_size) {
         throw OutOfDataException(m_size, bufferSize);
     }
@@ -236,11 +258,8 @@ BinaryQueue::Bucket::Bucket(const void* data,
     deleter(dataDeleter),
     param(userParam) {
 
-    if(data == nullptr)
-        throw NullPointerException("data");
-
-    if(dataDeleter == nullptr)
-        throw NullPointerException("dataDeleter");
+    assert(data != nullptr);
+    assert(dataDeleter != nullptr);
 }
 
 BinaryQueue::Bucket::~Bucket() {