diff --git a/dlls/shell32/shlmenu.c b/dlls/shell32/shlmenu.c index 957711ff759..aea319ccd7d 100644 --- a/dlls/shell32/shlmenu.c +++ b/dlls/shell32/shlmenu.c @@ -869,10 +869,11 @@ HRESULT WINAPI Shell_MergeMenus (HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uI hmDst, hmSrc, uInsert, uIDAdjust, uIDAdjustMax, uFlags); if (!hmDst || !hmSrc) - { return uIDMax; - } + return uIDMax; nItem = GetMenuItemCount(hmDst); + if (nItem == -1) + return uIDMax; if (uInsert >= (UINT)nItem) /* insert position inside menu? */ { diff --git a/dlls/shell32/tests/shlfileop.c b/dlls/shell32/tests/shlfileop.c index 0a5cdcab4fd..4d74b939c61 100644 --- a/dlls/shell32/tests/shlfileop.c +++ b/dlls/shell32/tests/shlfileop.c @@ -2224,6 +2224,17 @@ static void test_unicode(void) ok(!file_existsW(UNICODE_PATH), "The directory should have been removed\n"); } +extern HRESULT WINAPI Shell_MergeMenus (HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags); + +static void +test_shlmenu(void) { + HRESULT hres; + hres = Shell_MergeMenus (0, 0, 0x42, 0x4242, 0x424242, 0); + ok (hres == 0x4242, "expected 0x4242 but got %x\n", hres); + hres = Shell_MergeMenus ((HMENU)42, 0, 0x42, 0x4242, 0x424242, 0); + ok (hres == 0x4242, "expected 0x4242 but got %x\n", hres); +} + START_TEST(shlfileop) { InitFunctionPointers(); @@ -2263,4 +2274,6 @@ START_TEST(shlfileop) clean_after_shfo_tests(); test_unicode(); + + test_shlmenu(); }