[PATCH] comdlg32: Avoid crash in RemoveControlItem.
Bernhard Übelacker
bernhardu at mailbox.org
Fri Dec 10 04:43:25 CST 2021
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51640
Signed-off-by: Bernhard Übelacker <bernhardu at mailbox.org>
---
dlls/comdlg32/itemdlg.c | 3 +++
dlls/comdlg32/tests/itemdlg.c | 37 +++++++++++++++++++++++++++++++++++
2 files changed, 40 insertions(+)
diff --git a/dlls/comdlg32/itemdlg.c b/dlls/comdlg32/itemdlg.c
index d6957d51a66..da1a289bc5a 100644
--- a/dlls/comdlg32/itemdlg.c
+++ b/dlls/comdlg32/itemdlg.c
@@ -4156,6 +4156,9 @@ static HRESULT WINAPI IFileDialogCustomize_fnRemoveControlItem(IFileDialogCustom
item = get_item(ctrl, dwIDItem, CDCS_VISIBLE|CDCS_ENABLED, &position);
+ if (!item)
+ return E_INVALIDARG;
+
if ((item->cdcstate & (CDCS_VISIBLE|CDCS_ENABLED)) == (CDCS_VISIBLE|CDCS_ENABLED))
{
if(SendMessageW(ctrl->hwnd, CB_DELETESTRING, position, 0) == CB_ERR)
diff --git a/dlls/comdlg32/tests/itemdlg.c b/dlls/comdlg32/tests/itemdlg.c
index c38457a0a13..e6060acdf5d 100644
--- a/dlls/comdlg32/tests/itemdlg.c
+++ b/dlls/comdlg32/tests/itemdlg.c
@@ -2460,6 +2460,42 @@ static void test_overwrite(void)
IShellItem_Release(psi_current);
}
+static void test_customize_remove_from_empty_combobox(void)
+{
+ IFileDialog *pfod;
+ IFileDialogCustomize *pfdc;
+ UINT i;
+ HRESULT hr;
+ hr = CoCreateInstance(&CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IFileDialog, (void**)&pfod);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileDialog_QueryInterface(pfod, &IID_IFileDialogCustomize, (void**)&pfdc);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+ if(FAILED(hr))
+ {
+ skip("Skipping IFileDialogCustomize tests.\n");
+ IFileDialog_Release(pfod);
+ return;
+ }
+
+ i = 107;
+ hr = IFileDialogCustomize_AddComboBox(pfdc, i);
+ ok(hr == S_OK, "got 0x%08x.\n", hr);
+
+ hr = IFileDialogCustomize_RemoveAllControlItems(pfdc, i);
+ ok(hr == E_NOTIMPL, "got 0x%08x.\n", hr);
+
+ hr = IFileDialogCustomize_SetSelectedControlItem(pfdc, i, 1000);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+
+ hr = IFileDialogCustomize_RemoveControlItem(pfdc, i, 0);
+ ok(hr == E_INVALIDARG, "got 0x%08x.\n", hr);
+
+ IFileDialogCustomize_Release(pfdc);
+ IFileDialog_Release(pfod);
+}
+
START_TEST(itemdlg)
{
OleInitialize(NULL);
@@ -2474,6 +2510,7 @@ START_TEST(itemdlg)
test_customize();
test_persistent_state();
test_overwrite();
+ test_customize_remove_from_empty_combobox();
}
else
skip("Skipping all Item Dialog tests.\n");
--
2.33.0
More information about the wine-devel
mailing list