Alistair Leslie-Hughes : version: VerQueryValueA/ W allow blank and NULL strings.

Alexandre Julliard julliard at winehq.org
Fri Nov 21 06:55:23 CST 2008


Module: wine
Branch: master
Commit: 9643411c324249860300641ef40a15de5d95e406
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9643411c324249860300641ef40a15de5d95e406

Author: Alistair Leslie-Hughes <leslie_alistair at 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);




More information about the wine-cvs mailing list