Mikołaj Zalewski : comctl32: toolbar: Fix the TB_ADDSTRING from resources for a NUL delimiter.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Oct 9 14:05:18 CDT 2006


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

Author: Mikołaj Zalewski <mikolaj at zalewski.pl>
Date:   Mon Oct  9 00:06:59 2006 +0200

comctl32: toolbar: Fix the TB_ADDSTRING from resources for a NUL delimiter.

---

 dlls/comctl32/tests/resources.h |    3 ---
 dlls/comctl32/tests/rsrc.rc     |    1 -
 dlls/comctl32/tests/toolbar.c   |    3 ---
 dlls/comctl32/toolbar.c         |   11 +++++++----
 4 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/dlls/comctl32/tests/resources.h b/dlls/comctl32/tests/resources.h
index 826f9c5..c99633d 100644
--- a/dlls/comctl32/tests/resources.h
+++ b/dlls/comctl32/tests/resources.h
@@ -29,9 +29,6 @@ #define IDS_TBADD2      17
 #define IDS_TBADD3      18
 #define IDS_TBADD4      19
 #define IDS_TBADD5      20
-#define IDS_TBADD6      21
 #define IDS_TBADD7      22
-#define IDS_TBADD8      23
-#define IDS_TBADD9      24
 
 #endif  /* __WINE_COMCTL32_TEST_RESOURCES_H */
diff --git a/dlls/comctl32/tests/rsrc.rc b/dlls/comctl32/tests/rsrc.rc
index b68ab1b..165dc15 100644
--- a/dlls/comctl32/tests/rsrc.rc
+++ b/dlls/comctl32/tests/rsrc.rc
@@ -37,7 +37,6 @@ STRINGTABLE 
     IDS_TBADD3           "*p*q*"
     IDS_TBADD4           "#p#q##"
     IDS_TBADD5           "|p||q|r|"
-    IDS_TBADD6           "\000a\000\000"
     IDS_TBADD7           "abracadabra"
 }
 
diff --git a/dlls/comctl32/tests/toolbar.c b/dlls/comctl32/tests/toolbar.c
index b71962b..220d703 100644
--- a/dlls/comctl32/tests/toolbar.c
+++ b/dlls/comctl32/tests/toolbar.c
@@ -362,9 +362,6 @@ void test_add_string()
     ret = SendMessageA(hToolbar, TB_ADDSTRINGA, (WPARAM)GetModuleHandle(NULL), IDS_TBADD5);
     ok(ret == 8, "TB_ADDSTRINGA - unexpected return %d\n", ret);
     CHECK_STRING_TABLE(11, ret6);
-    ret = SendMessageA(hToolbar, TB_ADDSTRINGA, (WPARAM)GetModuleHandle(NULL), IDS_TBADD6);
-    ok(ret == 11, "TB_ADDSTRINGA - unexpected return %d\n", ret);
-    CHECK_STRING_TABLE(11, ret6);
     ret = SendMessageA(hToolbar, TB_ADDSTRINGA, (WPARAM)GetModuleHandle(NULL), IDS_TBADD7);
     ok(ret == 11, "TB_ADDSTRINGA - unexpected return %d\n", ret);
     CHECK_STRING_TABLE(14, ret7);
diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c
index 2c79051..e0d06ae 100644
--- a/dlls/comctl32/toolbar.c
+++ b/dlls/comctl32/toolbar.c
@@ -2921,9 +2921,8 @@ #define MAX_RESOURCE_STRING_LENGTH 512
 	INT len;
 	TRACE("adding string from resource!\n");
 
-        LoadStringW ((HINSTANCE)wParam, (UINT)lParam,
+        len = LoadStringW ((HINSTANCE)wParam, (UINT)lParam,
                              szString, MAX_RESOURCE_STRING_LENGTH);
-        len = lstrlenW(szString);
 
         TRACE("len=%d %s\n", len, debugstr_w(szString));
         if (len == 0 || len == 1)
@@ -2932,11 +2931,15 @@ #define MAX_RESOURCE_STRING_LENGTH 512
         TRACE("Delimiter: 0x%x\n", *szString);
         delimiter = *szString;
         p = szString + 1;
-        if (szString[len-1] == delimiter)
-            szString[len-1] = 0;
 
         while ((next_delim = strchrW(p, delimiter)) != NULL) {
             *next_delim = 0;
+            if (next_delim + 1 >= szString + len)
+            {
+                /* this may happen if delimiter == '\0' or if the last char is a
+                 * delimiter (then it is ignored like the native does) */
+                break;
+            }
 
             infoPtr->strings = ReAlloc(infoPtr->strings, sizeof(LPWSTR)*(infoPtr->nNumStrings+1));
             Str_SetPtrW(&infoPtr->strings[infoPtr->nNumStrings], p);




More information about the wine-cvs mailing list