Module: wine Branch: master Commit: 9643411c324249860300641ef40a15de5d95e406 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9643411c324249860300641ef4...
Author: Alistair Leslie-Hughes leslie_alistair@hotmail.com Date: Fri Nov 21 20:02:54 2008 +1100
version: VerQueryValueA/W allow blank and NULL strings.
---
dlls/version/info.c | 7 +++++++ dlls/version/tests/info.c | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/dlls/version/info.c b/dlls/version/info.c index 51e25b3..cad3251 100644 --- a/dlls/version/info.c +++ b/dlls/version/info.c @@ -777,6 +777,9 @@ BOOL WINAPI VerQueryValueA( LPCVOID pBlock, LPCSTR lpSubBlock, if (!pBlock) return FALSE;
+ if (lpSubBlock == NULL || lpSubBlock[0] == '\0') + lpSubBlock = rootA; + if ( !VersionInfoIs16( info ) ) { BOOL ret; @@ -820,6 +823,7 @@ BOOL WINAPI VerQueryValueA( LPCVOID pBlock, LPCSTR lpSubBlock, BOOL WINAPI VerQueryValueW( LPCVOID pBlock, LPCWSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen ) { + static const WCHAR nullW[] = { 0 }; static const WCHAR rootW[] = { '\', 0 }; static const WCHAR varfileinfoW[] = { '\','V','a','r','F','i','l','e','I','n','f','o', '\','T','r','a','n','s','l','a','t','i','o','n', 0 }; @@ -832,6 +836,9 @@ BOOL WINAPI VerQueryValueW( LPCVOID pBlock, LPCWSTR lpSubBlock, if (!pBlock) return FALSE;
+ if (lpSubBlock == NULL || lpSubBlock[0] == nullW[0]) + lpSubBlock = rootW; + if ( VersionInfoIs16( info ) ) { BOOL ret; diff --git a/dlls/version/tests/info.c b/dlls/version/tests/info.c index a64d911..fa120df 100644 --- a/dlls/version/tests/info.c +++ b/dlls/version/tests/info.c @@ -248,6 +248,13 @@ static void test_info(void) if (!boolret) goto cleanup;
+ boolret = VerQueryValueA( pVersionInfo, NULL, (LPVOID *)&pFixedVersionInfo, &uiLength ); + ok (boolret || GetLastError() == NO_ERROR /* Win98 */, + "VerQueryValueA failed: GetLastError = %u\n", GetLastError()); + + boolret = VerQueryValueA( pVersionInfo, "", (LPVOID *)&pFixedVersionInfo, &uiLength ); + ok (boolret, "VerQueryValueA failed: GetLastError = %u\n", GetLastError()); + boolret = VerQueryValueA( pVersionInfo, backslash, (LPVOID *)&pFixedVersionInfo, &uiLength ); ok (boolret, "VerQueryValueA failed: GetLastError = %u\n", GetLastError()); if (!boolret) @@ -286,6 +293,7 @@ static void test_32bit_win(void) WCHAR mypathW[MAX_PATH]; char rootA[] = "\"; WCHAR rootW[] = { '\', 0 }; + WCHAR emptyW[] = { 0 }; char varfileinfoA[] = "\VarFileInfo\Translation"; WCHAR varfileinfoW[] = { '\','V','a','r','F','i','l','e','I','n','f','o', '\','T','r','a','n','s','l','a','t','i','o','n', 0 }; @@ -392,6 +400,12 @@ static void test_32bit_win(void)
if (is_unicode_enabled) { + retW = VerQueryValueW( pVersionInfoW, NULL, (LPVOID *)&pBufW, &uiLengthW ); + ok (retW, "VerQueryValueW failed: GetLastError = %u\n", GetLastError()); + + retW = VerQueryValueW( pVersionInfoW, emptyW, (LPVOID *)&pBufW, &uiLengthW ); + ok (retW, "VerQueryValueW failed: GetLastError = %u\n", GetLastError()); + retW = VerQueryValueW( pVersionInfoW, rootW, (LPVOID *)&pBufW, &uiLengthW ); ok (retW, "VerQueryValueW failed: GetLastError = %u\n", GetLastError()); ok ( uiLengthA == sizeof(VS_FIXEDFILEINFO), "Size (%d) doesn't match the size of the VS_FIXEDFILEINFO struct\n", uiLengthA);