aboutsummaryrefslogtreecommitdiff
path: root/loader/loader.c
diff options
context:
space:
mode:
authorJon Ashburn <jon@lunarg.com>2015-04-14 09:15:32 -0600
committerChia-I Wu <olv@lunarg.com>2015-04-16 17:48:20 +0800
commit042720a89b410c2348a30bac14ca56cb9694b99e (patch)
tree7da52641e292f9e52d577ec50851920000e8e236 /loader/loader.c
parentef329ef041b9342c86cd1536d41bd201ed61c0ff (diff)
downloadusermoji-042720a89b410c2348a30bac14ca56cb9694b99e.tar.xz
loader: Add check for invalid enabled extensions at CreateInstance
Diffstat (limited to 'loader/loader.c')
-rw-r--r--loader/loader.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/loader/loader.c b/loader/loader.c
index 712118ac..e9f51ca2 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -351,6 +351,17 @@ static void loader_add_to_ext_list(uint32_t count,
}
}
+static bool loader_is_extension_scanned(const char *name)
+{
+ uint32_t i;
+
+ for (i = 0; i < loader.scanned_ext_list_count; i++) {
+ if (!strcmp(name, loader.scanned_ext_list[i]->extName))
+ return true;
+ }
+ return false;
+}
+
static void loader_coalesce_extensions()
{
uint32_t i;
@@ -1075,8 +1086,12 @@ LOADER_EXPORT VkResult VKAPI vkCreateInstance(
ptr_instance->extension_count = pCreateInfo->extensionCount;
ptr_instance->extension_names = (ptr_instance->extension_count > 0) ?
malloc(sizeof (char *) * ptr_instance->extension_count) : NULL;
+ if (ptr_instance->extension_names == NULL && (ptr_instance->extension_count > 0))
+ return VK_ERROR_OUT_OF_MEMORY;
for (i = 0; i < ptr_instance->extension_count; i++) {
- ptr_instance->extension_names[i] = malloc(strlen(pCreateInfo->ppEnabledExtensionNames[i] + 1));
+ if (!loader_is_extension_scanned(pCreateInfo->ppEnabledExtensionNames[i]))
+ return VK_ERROR_INVALID_EXTENSION;
+ ptr_instance->extension_names[i] = malloc(strlen(pCreateInfo->ppEnabledExtensionNames[i]) + 1);
if (ptr_instance->extension_names[i] == NULL)
return VK_ERROR_OUT_OF_MEMORY;
strcpy(ptr_instance->extension_names[i], pCreateInfo->ppEnabledExtensionNames[i]);