From 6c26618dd8ba10e82ca22a8d5b976e74fbad9d43 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 6 Apr 2021 21:52:20 +0200 Subject: [PATCH] Fix a problem of null-termination with Win32 API --- plugins/vst/SfizzForeignPaths.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/plugins/vst/SfizzForeignPaths.cpp b/plugins/vst/SfizzForeignPaths.cpp index df7009df..b92b8616 100644 --- a/plugins/vst/SfizzForeignPaths.cpp +++ b/plugins/vst/SfizzForeignPaths.cpp @@ -13,8 +13,6 @@ namespace SfizzPaths { fs::path getAriaPathSetting(const char* name) { - fs::path path; - std::unique_ptr nameW; unsigned nameSize = MultiByteToWideChar(CP_UTF8, 0, name, -1, nullptr, 0); if (nameSize == 0) @@ -30,17 +28,17 @@ fs::path getAriaPathSetting(const char* name) if (status != ERROR_SUCCESS) return {}; - WCHAR valueW[32768]; - DWORD valueSize = sizeof(valueW); + DWORD valueSize = 32768 * sizeof(WCHAR); + std::unique_ptr valueW(new WCHAR[(valueSize / sizeof(WCHAR)) + 1]()); DWORD valueType; status = RegQueryValueExW( key, nameW.get(), nullptr, - &valueType, reinterpret_cast(valueW), &valueSize); + &valueType, reinterpret_cast(valueW.get()), &valueSize); RegCloseKey(key); if (status != ERROR_SUCCESS || (valueType != REG_SZ && valueType != REG_EXPAND_SZ)) return {}; - return fs::path(valueW); + return fs::path(valueW.get()); } #elif defined(__APPLE__) // implementation in SfizzForeignPaths.mm