diff --git a/debian/changelog b/debian/changelog index e21352a3..13c2ca1b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,8 @@ +wine-staging (1.7.55) UNRELEASED; urgency=low + * Remove disabled shell32-Quoted_ShellExecute patchset (bug already fixed and + all tests pass). + -- Sebastian Lackner Sun, 01 Nov 2015 01:06:20 +0100 + wine-staging (1.7.54) unstable; urgency=low * Updated server-FileEndOfFileInformation patchset, growing a memory mapped file should still work. diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 94984428..39f81861 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -58,7 +58,7 @@ upstream_commit() # Show version information version() { - echo "Wine Staging 1.7.54" + echo "Wine Staging 1.7.55 (unreleased)" echo "Copyright (C) 2014-2015 the Wine Staging project authors." echo "" echo "Patchset to be applied on upstream Wine:" diff --git a/patches/shell32-Quoted_ShellExecute/0001-shell32-Quote-program-name-in-ShellExecuteEx-if-it-c.patch b/patches/shell32-Quoted_ShellExecute/0001-shell32-Quote-program-name-in-ShellExecuteEx-if-it-c.patch deleted file mode 100644 index 8378b371..00000000 --- a/patches/shell32-Quoted_ShellExecute/0001-shell32-Quote-program-name-in-ShellExecuteEx-if-it-c.patch +++ /dev/null @@ -1,173 +0,0 @@ -From bed6c718ccc09100c20527dde2801c94f7776108 Mon Sep 17 00:00:00 2001 -From: Stefan Leichter -Date: Mon, 5 Jan 2015 00:18:14 -0700 -Subject: shell32: Quote program name in ShellExecuteEx if it contains spaces. - ---- - dlls/shell32/shlexec.c | 33 +++++++++++++++++++++++---------- - dlls/shell32/tests/shlexec.c | 32 ++++++++++++++++++++++++++++++-- - 2 files changed, 53 insertions(+), 12 deletions(-) - -diff --git a/dlls/shell32/shlexec.c b/dlls/shell32/shlexec.c -index 2d9690a..df0f11c 100644 ---- a/dlls/shell32/shlexec.c -+++ b/dlls/shell32/shlexec.c -@@ -1558,6 +1558,7 @@ static void do_error_dialog( UINT_PTR retval, HWND hwnd ) - */ - static BOOL SHELL_execute( LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc ) - { -+ static const WCHAR wQuote[] = {'\"',0}; - static const WCHAR wSpace[] = {' ',0}; - static const WCHAR wWww[] = {'w','w','w',0}; - static const WCHAR wHttp[] = {'h','t','t','p',':','/','/',0}; -@@ -1580,6 +1581,7 @@ static BOOL SHELL_execute( LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc ) - LPCWSTR lpFile; - UINT_PTR retval = SE_ERR_NOASSOC; - BOOL appKnownSingular = FALSE; -+ BOOL needs_quote; - - /* make a local copy of the LPSHELLEXECUTEINFO structure and work with this from now on */ - sei_tmp = *sei; -@@ -1802,32 +1804,35 @@ static BOOL SHELL_execute( LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc ) - } - else - { -- /* If the executable name is not quoted, we have to use this search loop here, -- that in CreateProcess() is not sufficient because it does not handle shell links. */ -+ /* FIXME: what versions support this? Fails on 2000/XP -+ * If the executable name is not quoted, we have to use this search loop here, -+ * that in CreateProcess() is not sufficient because it does not handle shell links. */ - WCHAR buffer[MAX_PATH], xlpFile[MAX_PATH]; -- LPWSTR space, s; -+ LPWSTR space; - -- LPWSTR beg = wszApplicationName/*sei_tmp.lpFile*/; -- for(s=beg; (space=strchrW(s, ' ')); s=space+1) { -- int idx = space-sei_tmp.lpFile; -- memcpy(buffer, sei_tmp.lpFile, idx * sizeof(WCHAR)); -+ lstrcpynW(buffer, wszApplicationName, sizeof(buffer)/sizeof(WCHAR)); -+ space = buffer + strlenW(buffer); -+ do -+ { -+ int idx = space-buffer; - buffer[idx] = '\0'; - - /*FIXME This finds directory paths if the targeted file name contains spaces. */ - if (SearchPathW(*sei_tmp.lpDirectory? sei_tmp.lpDirectory: NULL, buffer, wszExe, sizeof(xlpFile)/sizeof(xlpFile[0]), xlpFile, NULL)) - { - /* separate out command from parameter string */ -- LPCWSTR p = space + 1; -+ LPCWSTR p = wszApplicationName + idx; - - while(isspaceW(*p)) - ++p; - - strcpyW(wszParameters, p); -- *space = '\0'; -+ wszApplicationName[idx] = '\0'; - - break; - } - } -+ while((space=strrchrW(buffer, ' '))); - - lpFile = sei_tmp.lpFile; - } -@@ -1836,6 +1841,9 @@ static BOOL SHELL_execute( LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc ) - - wcmd = wcmdBuffer; - len = lstrlenW(wszApplicationName) + 1; -+ needs_quote = NULL != strstrW(wszApplicationName,wSpace); -+ if (needs_quote) -+ len += 2; - if (sei_tmp.lpParameters[0]) - len += 1 + lstrlenW(wszParameters); - if (len > wcmdLen) -@@ -1843,7 +1851,12 @@ static BOOL SHELL_execute( LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc ) - wcmd = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); - wcmdLen = len; - } -- strcpyW(wcmd, wszApplicationName); -+ -+ wcmd[0] = 0; -+ if (needs_quote) strcatW(wcmd, wQuote); -+ strcatW(wcmd, wszApplicationName); -+ if (needs_quote) strcatW(wcmd, wQuote); -+ - if (sei_tmp.lpParameters[0]) { - strcatW(wcmd, wSpace); - strcatW(wcmd, wszParameters); -diff --git a/dlls/shell32/tests/shlexec.c b/dlls/shell32/tests/shlexec.c -index f81794e..2b3947e 100644 ---- a/dlls/shell32/tests/shlexec.c -+++ b/dlls/shell32/tests/shlexec.c -@@ -857,6 +857,7 @@ static const char* testfiles[]= - "%s\\masked", - "%s\\test file.sde", - "%s\\test file.exe", -+ "%s\\test file two.exe", - "%s\\test2.exe", - "%s\\simple.shlexec", - "%s\\drawback_file.noassoc", -@@ -931,7 +932,7 @@ static void test_lpFile_parsed(void) - /* existing "drawback_file.noassoc" prevents finding "drawback_file.noassoc foo.shlexec" on wine */ - sprintf(fileA, "%s\\drawback_file.noassoc foo.shlexec", tmpdir); - rc=shell_execute(NULL, fileA, NULL, NULL); -- todo_wine ok(rc > 32, "%s failed: rc=%lu\n", shell_call, rc); -+ ok(rc > 32, "%s failed: rc=%lu\n", shell_call, rc); - - /* if quoted, existing "drawback_file.noassoc" not prevents finding "drawback_file.noassoc foo.shlexec" on wine */ - sprintf(fileA, "\"%s\\drawback_file.noassoc foo.shlexec\"", tmpdir); -@@ -1547,7 +1548,7 @@ static void test_filename(void) - "%s failed: rc=%ld err=%u\n", shell_call, - rc, GetLastError()); - } -- else todo_wine -+ else - { - ok(rc==test->rc, "%s failed: rc=%ld err=%u\n", shell_call, - rc, GetLastError()); -@@ -2094,6 +2095,7 @@ static void test_exes(void) - { - char filename[MAX_PATH]; - char params[1024]; -+ DWORD retval; - INT_PTR rc; - - sprintf(params, "shlexec \"%s\" Exec", child_file); -@@ -2120,6 +2122,32 @@ static void test_exes(void) - { - win_skip("Skipping shellexecute of file with unassociated extension\n"); - } -+ -+ /* the directory with the test programs contain "test file.exe" -+ * and "test file two.exe". Check we do not start the first -+ * when we specify to start the second (see bug 19666) -+ */ -+ sprintf(filename, "%s\\test file.exe", tmpdir); -+ retval = CopyFileA(argv0, filename, FALSE); -+ ok(retval, "CopyFile(\"%s\",\"%s\",FALSE) failed\n", argv0, filename); -+ sprintf(filename, "%s\\test file two.exe", tmpdir); -+ retval = CopyFileA(argv0, filename, FALSE); -+ ok(retval, "CopyFile(\"%s\",\"%s\",FALSE) failed\n", argv0, filename); -+ rc=shell_execute_ex(SEE_MASK_NOZONECHECKS, NULL, filename, params, NULL, NULL); -+ ok(rc > 32, "%s returned %lu\n", shell_call, rc); -+ okChildInt("argcA", 4); -+ okChildString("argvA0", filename); -+ okChildString("argvA3", "Exec"); -+ -+ /* check quoted filename */ -+ sprintf(filename, "\"%s\\test file two.exe\"", tmpdir); -+ rc=shell_execute_ex(SEE_MASK_NOZONECHECKS, NULL, filename, params, NULL, NULL); -+ ok(rc > 32, "%s returned %lu\n", shell_call, rc); -+ okChildInt("argcA", 4); -+ /* strip the quotes for the compare */ -+ sprintf(filename, "%s\\test file two.exe", tmpdir); -+ okChildString("argvA0", filename); -+ okChildString("argvA3", "Exec"); - } - - typedef struct --- -1.9.1 - diff --git a/patches/shell32-Quoted_ShellExecute/definition b/patches/shell32-Quoted_ShellExecute/definition deleted file mode 100644 index c59dbeaa..00000000 --- a/patches/shell32-Quoted_ShellExecute/definition +++ /dev/null @@ -1,2 +0,0 @@ -# Fixes: [19666] Multiple applications start wrong executable if whitespace present in name -Disabled: true