comctl32/comboex: Handle NULL item text case to avoid crash.

This commit is contained in:
Nikolay Sivov 2009-10-13 20:59:39 +04:00 committed by Alexandre Julliard
parent d7a9e2d275
commit e1de222e4e
2 changed files with 47 additions and 0 deletions

View File

@ -510,6 +510,17 @@ static UINT COMBOEX_GetListboxText(const COMBOEX_INFO *infoPtr, INT_PTR n, LPWST
return 0;
str = COMBOEX_GetText(infoPtr, item);
if (!str)
{
if (buf)
{
if (infoPtr->unicode)
buf[0] = 0;
else
*((LPSTR)buf) = 0;
}
return 0;
}
if (infoPtr->unicode)
{

View File

@ -288,6 +288,41 @@ static void test_WM_LBUTTONDOWN(void)
DestroyWindow(hComboEx);
}
static void test_CB_GETLBTEXT(void)
{
HWND hCombo;
CHAR buff[1];
COMBOBOXEXITEMA item;
LRESULT ret;
hCombo = createComboEx(WS_BORDER | WS_VISIBLE | WS_CHILD | CBS_DROPDOWN);
/* set text to null */
addItem(hCombo, 0, NULL);
buff[0] = 'a';
item.mask = CBEIF_TEXT;
item.iItem = 0;
item.pszText = buff;
item.cchTextMax = 1;
ret = SendMessage(hCombo, CBEM_GETITEMA, 0, (LPARAM)&item);
ok(ret != 0, "CBEM_GETITEM failed\n");
ok(buff[0] == 0, "\n");
ret = SendMessage(hCombo, CB_GETLBTEXTLEN, 0, 0);
ok(ret == 0, "Expected zero length\n");
ret = SendMessage(hCombo, CB_GETLBTEXTLEN, 0, 0);
ok(ret == 0, "Expected zero length\n");
buff[0] = 'a';
ret = SendMessage(hCombo, CB_GETLBTEXT, 0, (LPARAM)buff);
ok(ret == 0, "Expected zero length\n");
ok(buff[0] == 0, "Expected null terminator as a string, got %s\n", buff);
DestroyWindow(hCombo);
}
static LRESULT CALLBACK ComboExTestWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg) {
@ -362,6 +397,7 @@ START_TEST(comboex)
test_comboboxex();
test_WM_LBUTTONDOWN();
test_CB_GETLBTEXT();
cleanup();
}