loader: Fix unhandled out of memory errors
authorLenny Komow <lenny@lunarg.com>
Wed, 9 May 2018 16:48:41 +0000 (10:48 -0600)
committerLenny Komow <lenny@lunarg.com>
Thu, 10 May 2018 17:10:43 +0000 (11:10 -0600)
Change-Id: I3b672a9d54e1509b550407f1b4ffae58b48beb85

loader/loader.c

index 26ff520..3d3f9be 100644 (file)
@@ -2837,6 +2837,10 @@ static VkResult loader_read_json_layer(const struct loader_instance *inst, struc
             cJSON *inst_ext_json = cJSON_GetObjectItem(pre_instance, "vkEnumerateInstanceExtensionProperties");
             if (inst_ext_json) {
                 char *inst_ext_name = cJSON_Print(inst_ext_json);
+                if (inst_ext_name == NULL) {
+                    result = VK_ERROR_OUT_OF_HOST_MEMORY;
+                    goto out;
+                }
                 size_t len = strlen(inst_ext_name) >= MAX_STRING_SIZE ? MAX_STRING_SIZE - 3 : strlen(inst_ext_name) - 2;
                 strncpy(props->pre_instance_functions.enumerate_instance_extension_properties, inst_ext_name + 1, len);
                 props->pre_instance_functions.enumerate_instance_extension_properties[len] = '\0';
@@ -2846,6 +2850,10 @@ static VkResult loader_read_json_layer(const struct loader_instance *inst, struc
             cJSON *inst_layer_json = cJSON_GetObjectItem(pre_instance, "vkEnumerateInstanceLayerProperties");
             if (inst_layer_json) {
                 char *inst_layer_name = cJSON_Print(inst_layer_json);
+                if (inst_layer_name == NULL) {
+                    result = VK_ERROR_OUT_OF_HOST_MEMORY;
+                    goto out;
+                }
                 size_t len = strlen(inst_layer_name) >= MAX_STRING_SIZE ? MAX_STRING_SIZE - 3 : strlen(inst_layer_name) - 2;
                 strncpy(props->pre_instance_functions.enumerate_instance_layer_properties, inst_layer_name + 1, len);
                 props->pre_instance_functions.enumerate_instance_layer_properties[len] = '\0';
@@ -2855,6 +2863,10 @@ static VkResult loader_read_json_layer(const struct loader_instance *inst, struc
             cJSON *inst_version_json = cJSON_GetObjectItem(pre_instance, "vkEnumerateInstanceVersion");
             if (inst_version_json) {
                 char *inst_version_name = cJSON_Print(inst_version_json);
+                if (inst_version_json) {
+                    result = VK_ERROR_OUT_OF_HOST_MEMORY;
+                    goto out;
+                }
                 size_t len = strlen(inst_version_name) >= MAX_STRING_SIZE ? MAX_STRING_SIZE - 3 : strlen(inst_version_name) - 2;
                 strncpy(props->pre_instance_functions.enumerate_instance_version, inst_version_name + 1, len);
                 props->pre_instance_functions.enumerate_instance_version[len] = '\0';