Skip to content

Commit 8f109e3

Browse files
committed
[d3d9] Fix lifetime of extension names
1 parent d11b68f commit 8f109e3

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

src/d3d9/d3d9_interop.cpp

+14-2
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,12 @@ namespace dxvk {
9999
const uint32_t extCount = extInfo.extensionNameList.count();
100100
pCreateInfo->ppEnabledExtensionNames = extCount > 0 ? new const char*[extCount] : nullptr;
101101
for (uint32_t i = 0; i < extCount; i++) {
102-
pCreateInfo->ppEnabledExtensionNames[i] = extInfo.extensionNameList.name(i);
102+
const char* nameStr = extInfo.extensionNameList.name(i);
103+
size_t nameLen = std::strlen(nameStr);
104+
char* name = new char[nameLen + 1];
105+
std::strncpy(name, nameStr, nameLen);
106+
name[nameLen] = '\0';
107+
pCreateInfo->ppEnabledExtensionNames[i] = name;
103108
}
104109
pCreateInfo->info.ppEnabledExtensionNames = pCreateInfo->ppEnabledExtensionNames;
105110
pCreateInfo->info.enabledExtensionCount = extCount;
@@ -112,8 +117,15 @@ namespace dxvk {
112117
D3D9VkDeviceCreateInfo* pCreateInfo) {
113118
if (!pCreateInfo)
114119
return;
115-
if (pCreateInfo->ppEnabledExtensionNames != nullptr)
120+
121+
if (pCreateInfo->ppEnabledExtensionNames != nullptr) {
122+
for (uint32_t i = 0; i < pCreateInfo->info.enabledExtensionCount; i++) {
123+
delete pCreateInfo->ppEnabledExtensionNames[i];
124+
}
125+
116126
delete[] pCreateInfo->ppEnabledExtensionNames;
127+
}
128+
117129
if (pCreateInfo->pQueueCreateInfos != nullptr)
118130
delete[] pCreateInfo->pQueueCreateInfos;
119131
delete pCreateInfo;

0 commit comments

Comments
 (0)