From: Christian Kamm Date: Wed, 27 Feb 2019 11:36:54 +0000 (+0100) Subject: Windows: Fix context menu handling only own verbs #7004 X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~222^2^2~335^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=a704cca09079cbad15f7e6bca1144a76d25709a9;p=nextcloud-desktop.git Windows: Fix context menu handling only own verbs #7004 Previously it'd handle all verbs as if they were our own. Signed-off-by: Michael Schuster --- diff --git a/shell_integration/windows/OCContextMenu/OCContextMenu.cpp b/shell_integration/windows/OCContextMenu/OCContextMenu.cpp index 582783f48..9e9052211 100644 --- a/shell_integration/windows/OCContextMenu/OCContextMenu.cpp +++ b/shell_integration/windows/OCContextMenu/OCContextMenu.cpp @@ -182,20 +182,38 @@ IFACEMETHODIMP OCContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO pici) { std::wstring command; + CMINVOKECOMMANDINFOEX *piciEx = nullptr; + if (pici->cbSize == sizeof(CMINVOKECOMMANDINFOEX)) + piciEx = (CMINVOKECOMMANDINFOEX*)pici; + // For the Unicode case, if the high-order word is not zero, the // command's verb string is in lpcmi->lpVerbW. - if (HIWORD(((CMINVOKECOMMANDINFOEX*)pici)->lpVerbW)) - { - command = ((CMINVOKECOMMANDINFOEX *)pici)->lpVerbW; - } else { + if (piciEx + && (piciEx->fMask & CMIC_MASK_UNICODE) + && HIWORD(((CMINVOKECOMMANDINFOEX*)pici)->lpVerbW)) { + + command = piciEx->lpVerbW; + + // Verify that we handle the verb + bool handled = false; + for (auto &item : m_info.menuItems) { + if (item.command == command) { + handled = true; + break; + } + } + if (!handled) + return E_FAIL; + } else if (IS_INTRESOURCE(pici->lpVerb)) { // If the command cannot be identified through the verb string, then // check the identifier offset. - auto offset = LOWORD(pici->lpVerb); if (offset >= m_info.menuItems.size()) return E_FAIL; command = m_info.menuItems[offset].command; + } else { + return E_FAIL; } OCClientInterface::SendRequest(command.data(), m_selectedFiles);