From: Alex Henrie Subject: [PATCH v2 1/2] winemenubuilder: Skip desktop integration for certain associations Message-Id: <20200624071127.109241-2-alexhenrie24@gmail.com> Date: Wed, 24 Jun 2020 01:11:06 -0600 In-Reply-To: <20200624071127.109241-1-alexhenrie24@gmail.com> References: <20200624071127.109241-1-alexhenrie24@gmail.com> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=41275 Signed-off-by: Alex Henrie --- dlls/mshtml/mshtml.inf | 6 +++ loader/wine.inf.in | 10 +++++ programs/winemenubuilder/winemenubuilder.c | 50 +++++++++++++++++++--- 3 files changed, 61 insertions(+), 5 deletions(-) diff --git a/dlls/mshtml/mshtml.inf b/dlls/mshtml/mshtml.inf index 4a650b444f..86260590f6 100644 --- a/dlls/mshtml/mshtml.inf +++ b/dlls/mshtml/mshtml.inf @@ -111,6 +111,7 @@ HKCR,"giffile\shell\open\ddeexec",,,"""file:%%1"",,-1,,,,," HKCR,"giffile\shell\open\ddeexec\Application",,,"IExplore" HKCR,"giffile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"giffile\DefaultIcon",,,"%16422%\Internet Explorer\iexplore.exe,9" +HKCU,Software\Wine\FileOpenNaughtyList\.gif,"iexplore",,"""%16422%\Internet Explorer\iexplore.exe"" -nohome" ;; GZIP HKCR,"MIME\Database\Content Type\application/x-gzip","Extension",,".gz" @@ -158,6 +159,7 @@ HKCR,"jpegfile\shell\open\ddeexec",,,"""file:%%1"",,-1,,,,," HKCR,"jpegfile\shell\open\ddeexec\Application",,,"IExplore" HKCR,"jpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"jpegfile\DefaultIcon",,,"%16422%\Internet Explorer\iexplore.exe,8" +HKCU,Software\Wine\FileOpenNaughtyList\.jpe,"iexplore",,"""%16422%\Internet Explorer\iexplore.exe"" -nohome" ;; JPEG HKCR,"MIME\Database\Content Type\image/jpeg","CLSID",,"%CLSID_HTMLDocument%" @@ -173,6 +175,7 @@ HKCR,"jpegfile\shell\open\ddeexec",,,"""file:%%1"",,-1,,,,," HKCR,"jpegfile\shell\open\ddeexec\Application",,,"IExplore" HKCR,"jpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"jpegfile\DefaultIcon",,,"%16422%\Internet Explorer\iexplore.exe,8" +HKCU,Software\Wine\FileOpenNaughtyList\.jpeg,"iexplore",,"""%16422%\Internet Explorer\iexplore.exe"" -nohome" ;; JPG HKCR,".jpg",,2,"jpegfile" @@ -184,6 +187,7 @@ HKCR,"jpegfile\shell\open\ddeexec",,,"""file:%%1"",,-1,,,,," HKCR,"jpegfile\shell\open\ddeexec\Application",,,"IExplore" HKCR,"jpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"jpegfile\DefaultIcon",,,"%16422%\Internet Explorer\iexplore.exe,8" +HKCU,Software\Wine\FileOpenNaughtyList\.jpg,"iexplore",,"""%16422%\Internet Explorer\iexplore.exe"" -nohome" ;; MHTML HKCR,"MIME\Database\Content Type\message/rfc822","CLSID",,"%CLSID_MHTMLDocument%" @@ -221,6 +225,7 @@ HKCR,"pjpegfile\shell\open\ddeexec",,,"""file:%%1"",,-1,,,,," HKCR,"pjpegfile\shell\open\ddeexec\Application",,,"IExplore" HKCR,"pjpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"pjpegfile\DefaultIcon",,,"%16422%\Internet Explorer\iexplore.exe,8" +HKCU,Software\Wine\FileOpenNaughtyList\.jfif,"iexplore",,"""%16422%\Internet Explorer\iexplore.exe"" -nohome" ;; PNG HKCR,"MIME\Database\Content Type\image/png","Extension",,".png" @@ -234,6 +239,7 @@ HKCR,"pngfile\shell\open\ddeexec",,,"""file:%%1"",,-1,,,,," HKCR,"pngfile\shell\open\ddeexec\Application",,,"IExplore" HKCR,"pngfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"pngfile\DefaultIcon",,,"%16422%\Internet Explorer\iexplore.exe,9" +HKCU,Software\Wine\FileOpenNaughtyList\.png,"iexplore",,"""%16422%\Internet Explorer\iexplore.exe"" -nohome" ;; PS HKCR,"MIME\Database\Content Type\application/postscript","Extension",,".ps" diff --git a/loader/wine.inf.in b/loader/wine.inf.in index de0dd4e455..f6ecc01b72 100644 --- a/loader/wine.inf.in +++ b/loader/wine.inf.in @@ -501,6 +501,16 @@ HKCR,MIME\Database\Charset\us-ascii,"AliasForCharset",,iso-8859-1 HKCR,MIME\Database\Charset\visual,"AliasForCharset",,iso-8859-8 HKCR,MIME\Database\Charset\Windows-1254,"AliasForCharset",,iso-8859-9 +HKCU,Software\Wine\FileOpenNaughtyList\.htm,"winebrowser",,"""%11%\winebrowser.exe"" -nohome" +HKCU,Software\Wine\FileOpenNaughtyList\.html,"winebrowser",,"""%11%\winebrowser.exe"" -nohome" +HKCU,Software\Wine\FileOpenNaughtyList\.ini,"notepad",,"%11%\notepad.exe %1" +HKCU,Software\Wine\FileOpenNaughtyList\.pdf,"winebrowser",,"""%11%\winebrowser.exe"" -nohome" +HKCU,Software\Wine\FileOpenNaughtyList\.rtf,"wordpad",,"""%16422%\Windows NT\Accessories\wordpad.exe"" %1" +HKCU,Software\Wine\FileOpenNaughtyList\.txt,"notepad",,"%11%\notepad.exe %1" +HKCU,Software\Wine\FileOpenNaughtyList\.url,"ieframe",,"rundll32.exe ieframe.dll,OpenURL %l" +HKCU,Software\Wine\FileOpenNaughtyList\.wri,"wordpad",,"""%16422%\Windows NT\Accessories\wordpad.exe"" %1" +HKCU,Software\Wine\FileOpenNaughtyList\.xml,"winebrowser",,"""%11%\winebrowser.exe"" -nohome" + [ContentIndex] HKLM,System\CurrentControlSet\Control\ContentIndex\Language\Neutral,"WBreakerClass",,"{369647e0-17b0-11ce-9950-00aa004bbb1f}" HKLM,System\CurrentControlSet\Control\ContentIndex\Language\Neutral,"StemmerClass",,"" diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c index ee53619bb9..ffdfe7d8a4 100644 --- a/programs/winemenubuilder/winemenubuilder.c +++ b/programs/winemenubuilder/winemenubuilder.c @@ -2484,6 +2484,42 @@ static BOOL is_extension_banned(LPCWSTR extension) return FALSE; } +static BOOL on_naughty_list(const WCHAR *extension, const WCHAR *command) +{ + static const WCHAR FileOpenNaughtyListW[] = {'S','o','f','t','w','a','r','e','\\', + 'W','i','n','e','\\', + 'F','i','l','e','O','p','e','n','N','a','u','g','h','t','y','L','i','s','t','\\',0}; + WCHAR naughty_list_key_path[MAX_PATH]; + HKEY naughty_list_key; + WCHAR program_name[MAX_PATH], *naughty_command; + DWORD len = ARRAY_SIZE(program_name); + DWORD i = 0; + + if (ARRAY_SIZE(FileOpenNaughtyListW) + lstrlenW(extension) > ARRAY_SIZE(naughty_list_key_path)) + return FALSE; + + lstrcpyW(naughty_list_key_path, FileOpenNaughtyListW); + lstrcatW(naughty_list_key_path, extension); + + if (RegOpenKeyExW(HKEY_CURRENT_USER, naughty_list_key_path, 0, KEY_QUERY_VALUE, &naughty_list_key) != ERROR_SUCCESS) + return FALSE; + + while (RegEnumValueW(naughty_list_key, i, program_name, &len, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) + { + naughty_command = reg_get_valW(HKEY_CURRENT_USER, naughty_list_key_path, program_name); + if (strcmpW(command, naughty_command) == 0) + { + RegCloseKey(naughty_list_key); + return TRUE; + } + len = ARRAY_SIZE(program_name); + i++; + } + + RegCloseKey(naughty_list_key); + return FALSE; +} + static const char* get_special_mime_type(LPCWSTR extension) { static const WCHAR lnkW[] = {'.','l','n','k',0}; @@ -2582,6 +2618,15 @@ static BOOL generate_associations(const char *xdg_data_home, const char *package char *progIdA = NULL; char *mimeProgId = NULL; + commandW = assoc_query(ASSOCSTR_COMMAND, extensionW, openW); + if (commandW == NULL) + /* no command => no application is associated */ + goto end; + + if (on_naughty_list(extensionW, commandW)) + /* command is on naughty list => desktop integration is not desirable */ + goto end; + extensionA = wchars_to_utf8_chars(strlwrW(extensionW)); if (extensionA == NULL) { @@ -2650,11 +2695,6 @@ static BOOL generate_associations(const char *xdg_data_home, const char *package } } - commandW = assoc_query(ASSOCSTR_COMMAND, extensionW, openW); - if (commandW == NULL) - /* no command => no application is associated */ - goto end; - executableW = assoc_query(ASSOCSTR_EXECUTABLE, extensionW, openW); if (executableW) openWithIconA = extract_icon(executableW, 0, NULL, FALSE); -- 2.27.0