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