Commit f9736bcc authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

comctl32/toolbar: Properly handle invalid arguments processing TB_ADDSTRING message.

parent d0e0e69f
...@@ -505,6 +505,14 @@ static void test_add_string(void) ...@@ -505,6 +505,14 @@ static void test_add_string(void)
ok(ret == 2, "TB_ADDSTRINGA - unexpected return %d\n", ret); ok(ret == 2, "TB_ADDSTRINGA - unexpected return %d\n", ret);
CHECK_STRING_TABLE(3, ret2); CHECK_STRING_TABLE(3, ret2);
/* null instance handle */
ret = SendMessageA(hToolbar, TB_ADDSTRINGA, 0, IDS_TBADD1);
ok(ret == -1, "TB_ADDSTRINGA - unexpected return %d\n", ret);
/* invalid instance handle */
ret = SendMessageA(hToolbar, TB_ADDSTRINGA, 0xdeadbeef, IDS_TBADD1);
ok(ret == -1, "TB_ADDSTRINGA - unexpected return %d\n", ret);
ret = SendMessageA(hToolbar, TB_ADDSTRINGA, (WPARAM)GetModuleHandle(NULL), IDS_TBADD1); ret = SendMessageA(hToolbar, TB_ADDSTRINGA, (WPARAM)GetModuleHandle(NULL), IDS_TBADD1);
ok(ret == 3, "TB_ADDSTRINGA - unexpected return %d\n", ret); ok(ret == 3, "TB_ADDSTRINGA - unexpected return %d\n", ret);
CHECK_STRING_TABLE(3, ret2); CHECK_STRING_TABLE(3, ret2);
......
...@@ -2900,13 +2900,27 @@ TOOLBAR_AddStringW (TOOLBAR_INFO *infoPtr, HINSTANCE hInstance, LPARAM lParam) ...@@ -2900,13 +2900,27 @@ TOOLBAR_AddStringW (TOOLBAR_INFO *infoPtr, HINSTANCE hInstance, LPARAM lParam)
BOOL fFirstString = (infoPtr->nNumStrings == 0); BOOL fFirstString = (infoPtr->nNumStrings == 0);
INT nIndex = infoPtr->nNumStrings; INT nIndex = infoPtr->nNumStrings;
if (hInstance && IS_INTRESOURCE(lParam)) { TRACE("%p, %lx\n", hInstance, lParam);
if (IS_INTRESOURCE(lParam)) {
WCHAR szString[MAX_RESOURCE_STRING_LENGTH]; WCHAR szString[MAX_RESOURCE_STRING_LENGTH];
WCHAR delimiter; WCHAR delimiter;
WCHAR *next_delim; WCHAR *next_delim;
HRSRC hrsrc;
WCHAR *p; WCHAR *p;
INT len; INT len;
TRACE("adding string from resource!\n");
TRACE("adding string from resource\n");
if (!hInstance) return -1;
hrsrc = FindResourceW( hInstance, MAKEINTRESOURCEW((LOWORD(lParam) >> 4) + 1),
(LPWSTR)RT_STRING );
if (!hrsrc)
{
TRACE("string not found in resources\n");
return -1;
}
len = LoadStringW (hInstance, (UINT)lParam, len = LoadStringW (hInstance, (UINT)lParam,
szString, MAX_RESOURCE_STRING_LENGTH); szString, MAX_RESOURCE_STRING_LENGTH);
...@@ -2915,7 +2929,7 @@ TOOLBAR_AddStringW (TOOLBAR_INFO *infoPtr, HINSTANCE hInstance, LPARAM lParam) ...@@ -2915,7 +2929,7 @@ TOOLBAR_AddStringW (TOOLBAR_INFO *infoPtr, HINSTANCE hInstance, LPARAM lParam)
if (len == 0 || len == 1) if (len == 0 || len == 1)
return nIndex; return nIndex;
TRACE("Delimiter: 0x%x\n", *szString); TRACE("delimiter: 0x%x\n", *szString);
delimiter = *szString; delimiter = *szString;
p = szString + 1; p = szString + 1;
...@@ -2941,7 +2955,7 @@ TOOLBAR_AddStringW (TOOLBAR_INFO *infoPtr, HINSTANCE hInstance, LPARAM lParam) ...@@ -2941,7 +2955,7 @@ TOOLBAR_AddStringW (TOOLBAR_INFO *infoPtr, HINSTANCE hInstance, LPARAM lParam)
if (p == NULL) if (p == NULL)
return -1; return -1;
TRACE("adding string(s) from array!\n"); TRACE("adding string(s) from array\n");
while (*p) { while (*p) {
len = strlenW (p); len = strlenW (p);
...@@ -2968,14 +2982,16 @@ TOOLBAR_AddStringA (TOOLBAR_INFO *infoPtr, HINSTANCE hInstance, LPARAM lParam) ...@@ -2968,14 +2982,16 @@ TOOLBAR_AddStringA (TOOLBAR_INFO *infoPtr, HINSTANCE hInstance, LPARAM lParam)
INT nIndex; INT nIndex;
INT len; INT len;
if (hInstance && IS_INTRESOURCE(lParam)) /* load from resources */ TRACE("%p, %lx\n", hInstance, lParam);
if (IS_INTRESOURCE(lParam)) /* load from resources */
return TOOLBAR_AddStringW(infoPtr, hInstance, lParam); return TOOLBAR_AddStringW(infoPtr, hInstance, lParam);
p = (LPSTR)lParam; p = (LPSTR)lParam;
if (p == NULL) if (p == NULL)
return -1; return -1;
TRACE("adding string(s) from array!\n"); TRACE("adding string(s) from array\n");
nIndex = infoPtr->nNumStrings; nIndex = infoPtr->nNumStrings;
while (*p) { while (*p) {
len = strlen (p); len = strlen (p);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment