Skip to content

Commit 2368357

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

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

src/d3d9/d3d9_interop.cpp

+13-2
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,11 @@ 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+
pCreateInfo->ppEnabledExtensionNames[i] = name;
103107
}
104108
pCreateInfo->info.ppEnabledExtensionNames = pCreateInfo->ppEnabledExtensionNames;
105109
pCreateInfo->info.enabledExtensionCount = extCount;
@@ -112,8 +116,15 @@ namespace dxvk {
112116
D3D9VkDeviceCreateInfo* pCreateInfo) {
113117
if (!pCreateInfo)
114118
return;
115-
if (pCreateInfo->ppEnabledExtensionNames != nullptr)
119+
120+
if (pCreateInfo->ppEnabledExtensionNames != nullptr) {
121+
for (uint32_t i = 0; i < pCreateInfo->info.enabledExtensionCount; i++) {
122+
delete pCreateInfo->ppEnabledExtensionNames[i];
123+
}
124+
116125
delete[] pCreateInfo->ppEnabledExtensionNames;
126+
}
127+
117128
if (pCreateInfo->pQueueCreateInfos != nullptr)
118129
delete[] pCreateInfo->pQueueCreateInfos;
119130
delete pCreateInfo;

0 commit comments

Comments
 (0)