From 266b097c0b0a13dd4934f55f61cad62ffcbb953d Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 3 Jun 2022 17:49:33 -0500 Subject: REG_EXPAND_SZ values are not necessarily a path. --- .../dutil/test/DUtilUnitTest/DUtilUnitTest.vcxproj | 1 + .../DUtilUnitTest/DUtilUnitTest.vcxproj.filters | 3 ++ src/libs/dutil/test/DUtilUnitTest/EnvUtilTests.cpp | 50 ++++++++++++++++++++++ src/libs/dutil/test/DUtilUnitTest/RegUtilTest.cpp | 43 +++++++++++++++++++ src/libs/dutil/test/DUtilUnitTest/precomp.h | 1 + 5 files changed, 98 insertions(+) create mode 100644 src/libs/dutil/test/DUtilUnitTest/EnvUtilTests.cpp (limited to 'src/libs/dutil/test/DUtilUnitTest') diff --git a/src/libs/dutil/test/DUtilUnitTest/DUtilUnitTest.vcxproj b/src/libs/dutil/test/DUtilUnitTest/DUtilUnitTest.vcxproj index 5b40eaf1..ee9f505e 100644 --- a/src/libs/dutil/test/DUtilUnitTest/DUtilUnitTest.vcxproj +++ b/src/libs/dutil/test/DUtilUnitTest/DUtilUnitTest.vcxproj @@ -49,6 +49,7 @@ + diff --git a/src/libs/dutil/test/DUtilUnitTest/DUtilUnitTest.vcxproj.filters b/src/libs/dutil/test/DUtilUnitTest/DUtilUnitTest.vcxproj.filters index fde49348..bcda6df0 100644 --- a/src/libs/dutil/test/DUtilUnitTest/DUtilUnitTest.vcxproj.filters +++ b/src/libs/dutil/test/DUtilUnitTest/DUtilUnitTest.vcxproj.filters @@ -30,6 +30,9 @@ Source Files + + Source Files + Source Files diff --git a/src/libs/dutil/test/DUtilUnitTest/EnvUtilTests.cpp b/src/libs/dutil/test/DUtilUnitTest/EnvUtilTests.cpp new file mode 100644 index 00000000..76dfa774 --- /dev/null +++ b/src/libs/dutil/test/DUtilUnitTest/EnvUtilTests.cpp @@ -0,0 +1,50 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +#include "precomp.h" + +using namespace System; +using namespace Xunit; +using namespace WixBuildTools::TestSupport; + +namespace DutilTests +{ + public ref class EnvUtil + { + public: + [Fact] + void EnvExpandEnvironmentStringsTest() + { + HRESULT hr = S_OK; + LPWSTR sczExpanded = NULL; + SIZE_T cchExpanded = 0; + LPCWSTR wzSimpleString = L"%USERPROFILE%"; + LPCWSTR wzMultipleString = L"%TEMP%;%PATH%"; + LPCWSTR wzLongMultipleString = L"%TEMP%;%PATH%;C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789"; + String^ expandedSimpleString = Environment::ExpandEnvironmentVariables(gcnew String(wzSimpleString)); + String^ expandedMultipleString = Environment::ExpandEnvironmentVariables(gcnew String(wzMultipleString)); + String^ expandedLongMultipleString = Environment::ExpandEnvironmentVariables(gcnew String(wzLongMultipleString)); + + try + { + hr = EnvExpandEnvironmentStrings(wzSimpleString, &sczExpanded, &cchExpanded); + NativeAssert::Succeeded(hr, "Failed to expand simple string."); + WixAssert::StringEqual(expandedSimpleString, gcnew String(sczExpanded), false); + NativeAssert::Equal(expandedSimpleString->Length + 1, cchExpanded); + + hr = EnvExpandEnvironmentStrings(wzMultipleString, &sczExpanded, &cchExpanded); + NativeAssert::Succeeded(hr, "Failed to expand multiple string."); + WixAssert::StringEqual(expandedMultipleString, gcnew String(sczExpanded), false); + NativeAssert::Equal(expandedMultipleString->Length + 1, cchExpanded); + + hr = EnvExpandEnvironmentStrings(wzLongMultipleString, &sczExpanded, &cchExpanded); + NativeAssert::Succeeded(hr, "Failed to expand long multiple string."); + WixAssert::StringEqual(expandedLongMultipleString, gcnew String(sczExpanded), false); + NativeAssert::Equal(expandedLongMultipleString->Length + 1, cchExpanded); + } + finally + { + ReleaseStr(sczExpanded); + } + } + }; +} diff --git a/src/libs/dutil/test/DUtilUnitTest/RegUtilTest.cpp b/src/libs/dutil/test/DUtilUnitTest/RegUtilTest.cpp index 575e3238..9e97f5e0 100644 --- a/src/libs/dutil/test/DUtilUnitTest/RegUtilTest.cpp +++ b/src/libs/dutil/test/DUtilUnitTest/RegUtilTest.cpp @@ -207,6 +207,49 @@ namespace DutilTests } } + [Fact] + void RegUtilExpandLongStringValueTest() + { + this->ExpandLongStringValueTest(); + } + + [Fact] + void RegUtilExpandLongStringValueFallbackTest() + { + RegFunctionForceFallback(); + this->ExpandLongStringValueTest(); + } + + void ExpandLongStringValueTest() + { + HRESULT hr = S_OK; + LPWSTR sczValue = NULL; + LPCWSTR wzValue = L"%TEMP%;%PATH%;C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789"; + String^ expandedValue = Environment::ExpandEnvironmentVariables(gcnew String(wzValue)); + + try + { + this->CreateBaseKey(); + + hr = RegWriteExpandString(hkBase, L"ExpandString", wzValue); + NativeAssert::Succeeded(hr, "Failed to write expand string value."); + + hr = RegReadString(hkBase, L"ExpandString", &sczValue); + NativeAssert::Succeeded(hr, "Failed to read expand string value."); + WixAssert::StringEqual(expandedValue, gcnew String(sczValue), false); + + ReleaseNullStr(sczValue); + + hr = RegReadString(hkBase, L"ExpandString", &sczValue); + NativeAssert::Succeeded(hr, "Failed to read expand string value."); + WixAssert::StringEqual(expandedValue, gcnew String(sczValue), false); + } + finally + { + ReleaseStr(sczValue); + } + } + [Fact] void RegUtilNotExpandStringValueTest() { diff --git a/src/libs/dutil/test/DUtilUnitTest/precomp.h b/src/libs/dutil/test/DUtilUnitTest/precomp.h index e9f8770b..bc628816 100644 --- a/src/libs/dutil/test/DUtilUnitTest/precomp.h +++ b/src/libs/dutil/test/DUtilUnitTest/precomp.h @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include -- cgit v1.2.3-55-g6feb