summaryrefslogtreecommitdiff
path: root/src/dutil/verutil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dutil/verutil.cpp')
-rw-r--r--src/dutil/verutil.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/dutil/verutil.cpp b/src/dutil/verutil.cpp
index fdb5a10a..21626f94 100644
--- a/src/dutil/verutil.cpp
+++ b/src/dutil/verutil.cpp
@@ -244,7 +244,7 @@ DAPI_(void) VerFreeVersion(
244 244
245DAPI_(HRESULT) VerParseVersion( 245DAPI_(HRESULT) VerParseVersion(
246 __in_z LPCWSTR wzVersion, 246 __in_z LPCWSTR wzVersion,
247 __in DWORD cchVersion, 247 __in SIZE_T cchVersion,
248 __in BOOL fStrict, 248 __in BOOL fStrict,
249 __out VERUTIL_VERSION** ppVersion 249 __out VERUTIL_VERSION** ppVersion
250 ) 250 )
@@ -267,9 +267,14 @@ DAPI_(HRESULT) VerParseVersion(
267 } 267 }
268 268
269 // Get string length if not provided. 269 // Get string length if not provided.
270 if (0 == cchVersion) 270 if (!cchVersion)
271 { 271 {
272 cchVersion = lstrlenW(wzVersion); 272 hr = ::StringCchLengthW(wzVersion, STRSAFE_MAX_CCH, reinterpret_cast<size_t*>(&cchVersion));
273 VerExitOnRootFailure(hr, "Failed to get length of version string: %ls", wzVersion);
274 }
275 else if (INT_MAX < cchVersion)
276 {
277 VerExitOnRootFailure(hr = E_INVALIDARG, "Version string is too long: %Iu", cchVersion);
273 } 278 }
274 279
275 if (L'v' == *wzVersion || L'V' == *wzVersion) 280 if (L'v' == *wzVersion || L'V' == *wzVersion)