layers: Fix PV overflow
authorMike Schuchardt <mikes@lunarg.com>
Wed, 13 Dec 2017 16:45:36 +0000 (09:45 -0700)
committerMike Schuchardt <mikes@lunarg.com>
Fri, 15 Dec 2017 15:42:22 +0000 (08:42 -0700)
Buffer pCreateInfo->size was being truncated to uint32_t before
comparison with 0

Change-Id: Iba6b94f2a0df6514d1ffb79d38e6c0738ea44d71

layers/parameter_validation.h
layers/parameter_validation_utils.cpp

index 6ef3de2..8acd34b 100644 (file)
@@ -24,6 +24,7 @@
 #include <algorithm>
 #include <cstdlib>
 #include <string>
+#include <sstream>
 #include <bitset>
 #include <mutex>
 #include <unordered_set>
@@ -153,9 +154,11 @@ bool ValidateGreaterThan(debug_report_data *report_data, const char *api_name, c
     bool skip_call = false;
 
     if (value <= lower_bound) {
-        skip_call |=
-            log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 1, LayerName,
-                    "%s: parameter %s must be greater than %d", api_name, parameter_name.get_name().c_str(), lower_bound);
+        std::ostringstream ss;
+        ss << api_name << ": parameter " << parameter_name.get_name() << " is " << value << " but must be greater than "
+           << lower_bound;
+        skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 1,
+                             LayerName, "%s", ss.str().c_str());
     }
 
     return skip_call;
index b299b02..7617826 100644 (file)
@@ -587,7 +587,7 @@ bool pv_vkCreateBuffer(VkDevice device, const VkBufferCreateInfo *pCreateInfo, c
     if (pCreateInfo != nullptr) {
         // Buffer size must be greater than 0 (error 00663)
         skip |=
-            ValidateGreaterThan(report_data, "vkCreateBuffer", "pCreateInfo->size", static_cast<uint32_t>(pCreateInfo->size), 0u);
+            ValidateGreaterThan(report_data, "vkCreateBuffer", "pCreateInfo->size", pCreateInfo->size, static_cast<VkDeviceSize>(0));
 
         // Validation for parameters excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml
         if (pCreateInfo->sharingMode == VK_SHARING_MODE_CONCURRENT) {