diff options
Diffstat (limited to 'src/dutil/verutil.cpp')
| -rw-r--r-- | src/dutil/verutil.cpp | 11 |
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 | ||
| 245 | DAPI_(HRESULT) VerParseVersion( | 245 | DAPI_(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) |
