From 71a0838ac3edbe0fa7c481be5b62c2df8c42215e Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Tue, 16 Dec 2014 01:49:58 +0100 Subject: [PATCH] Added patch to fix handling of subdirectory in FtpFindFirstFile. --- README.md | 5 + debian/changelog | 1 + patches/Makefile | 16 +++ ...ling-of-subdirectory-in-FtpFindFirst.patch | 110 ++++++++++++++++++ patches/wininet-FtpFindFirstFile/definition | 1 + 5 files changed, 133 insertions(+) create mode 100644 patches/wininet-FtpFindFirstFile/0001-wininet-Fix-handling-of-subdirectory-in-FtpFindFirst.patch create mode 100644 patches/wininet-FtpFindFirstFile/definition diff --git a/README.md b/README.md index a64db22e..8e1af029 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,11 @@ Wine. All those differences are also documented on the Included bug fixes and improvements =================================== +**Bugfixes and features included in the next upcoming release [1]:** + +* Fix handling of subdirectory in FtpFindFirstFile ([Wine Bug #16526](https://bugs.winehq.org/show_bug.cgi?id=16526)) + + **Bugs fixed in Wine Staging 1.7.33 [119]:** * ATL IOCS data should not be stored in GWLP_USERDATA ([Wine Bug #21767](https://bugs.winehq.org/show_bug.cgi?id=21767)) diff --git a/debian/changelog b/debian/changelog index 5bdf73c6..761fb1ef 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,6 @@ wine-compholio (1.7.34) UNRELEASED; urgency=low * Fix issue in DOS Attributes patch which broke ./configure on systems with alternative shells. + * Added patch to fix handling of subdirectory in FtpFindFirstFile. * Removed patch to implement combase HSTRING objects (accepted upstream). * Removed patch to add fake ProductId to registry (accepted upstream). -- Sebastian Lackner Mon, 15 Dec 2014 22:42:09 +0100 diff --git a/patches/Makefile b/patches/Makefile index 4a4af09f..4196a89e 100644 --- a/patches/Makefile +++ b/patches/Makefile @@ -131,6 +131,7 @@ PATCHLIST := \ winex11-Window_Groups.ok \ winex11-XEMBED.ok \ winex11-wglShareLists.ok \ + wininet-FtpFindFirstFile.ok \ wininet-encoding.ok \ wpcap-Dynamic_Linking.ok \ ws2_32-Connect_Time.ok \ @@ -2454,6 +2455,21 @@ winex11-wglShareLists.ok: echo '+ { "Michael Müller", "winex11.drv: Only warn about used contexts in wglShareLists.", 1 },'; \ ) > winex11-wglShareLists.ok +# Patchset wininet-FtpFindFirstFile +# | +# | This patchset fixes the following Wine bugs: +# | * [#16526] Fix handling of subdirectory in FtpFindFirstFile +# | +# | Modified files: +# | * dlls/wininet/ftp.c, dlls/wininet/tests/ftp.c +# | +.INTERMEDIATE: wininet-FtpFindFirstFile.ok +wininet-FtpFindFirstFile.ok: + $(call APPLY_FILE,wininet-FtpFindFirstFile/0001-wininet-Fix-handling-of-subdirectory-in-FtpFindFirst.patch) + @( \ + echo '+ { "Sebastian Lackner", "wininet: Fix handling of subdirectory in FtpFindFirstFile.", 1 },'; \ + ) > wininet-FtpFindFirstFile.ok + # Patchset wininet-encoding # | # | This patchset fixes the following Wine bugs: diff --git a/patches/wininet-FtpFindFirstFile/0001-wininet-Fix-handling-of-subdirectory-in-FtpFindFirst.patch b/patches/wininet-FtpFindFirstFile/0001-wininet-Fix-handling-of-subdirectory-in-FtpFindFirst.patch new file mode 100644 index 00000000..cd3afe90 --- /dev/null +++ b/patches/wininet-FtpFindFirstFile/0001-wininet-Fix-handling-of-subdirectory-in-FtpFindFirst.patch @@ -0,0 +1,110 @@ +From c86309d8f87a4ceb1f22fdb5ca678dc3f720d9ce Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Tue, 16 Dec 2014 01:37:12 +0100 +Subject: wininet: Fix handling of subdirectory in FtpFindFirstFile. + +Based on a patch by Mike Ruprecht. +--- + dlls/wininet/ftp.c | 18 +++++++++++++++++- + dlls/wininet/tests/ftp.c | 23 +++++++++++++++++++++-- + 2 files changed, 38 insertions(+), 3 deletions(-) + +diff --git a/dlls/wininet/ftp.c b/dlls/wininet/ftp.c +index f45e495..dbe9dd8 100644 +--- a/dlls/wininet/ftp.c ++++ b/dlls/wininet/ftp.c +@@ -831,6 +831,7 @@ static HINTERNET FTP_FtpFindFirstFileW(ftp_session_t *lpwfs, + INT nResCode; + appinfo_t *hIC = NULL; + HINTERNET hFindNext = NULL; ++ LPWSTR lpszSearchPath = NULL; + + TRACE("\n"); + +@@ -846,7 +847,20 @@ static HINTERNET FTP_FtpFindFirstFileW(ftp_session_t *lpwfs, + if (!FTP_SendPortOrPasv(lpwfs)) + goto lend; + +- if (!FTP_SendCommand(lpwfs->sndSocket, FTP_CMD_LIST, NULL, ++ /* split search path into file and path */ ++ if (lpszSearchFile) ++ { ++ LPCWSTR name = lpszSearchFile, p; ++ if ((p = strrchrW( name, '\\' ))) name = p + 1; ++ if ((p = strrchrW( name, '/' ))) name = p + 1; ++ if (name != lpszSearchFile) ++ { ++ lpszSearchPath = heap_strndupW(lpszSearchFile, name - lpszSearchFile); ++ lpszSearchFile = name; ++ } ++ } ++ ++ if (!FTP_SendCommand(lpwfs->sndSocket, FTP_CMD_LIST, lpszSearchPath, + lpwfs->hdr.lpfnStatusCB, &lpwfs->hdr, lpwfs->hdr.dwContext)) + goto lend; + +@@ -872,6 +886,8 @@ static HINTERNET FTP_FtpFindFirstFileW(ftp_session_t *lpwfs, + } + + lend: ++ HeapFree(GetProcessHeap(), 0, lpszSearchPath); ++ + if (lpwfs->lstnSocket != -1) + { + closesocket(lpwfs->lstnSocket); +diff --git a/dlls/wininet/tests/ftp.c b/dlls/wininet/tests/ftp.c +index b88b136..567545d 100644 +--- a/dlls/wininet/tests/ftp.c ++++ b/dlls/wininet/tests/ftp.c +@@ -751,6 +751,7 @@ static void test_find_first_file(HINTERNET hFtp, HINTERNET hConnect) + HINTERNET hSearch2; + HINTERNET hOpenFile; + DWORD error; ++ BOOL success; + + /* NULL as the search file ought to return the first file in the directory */ + SetLastError(0xdeadbeef); +@@ -770,13 +771,13 @@ static void test_find_first_file(HINTERNET hFtp, HINTERNET hConnect) + /* Try a valid filename in a subdirectory search */ + SetLastError(0xdeadbeef); + hSearch = FtpFindFirstFileA(hFtp, "pub/wine", &findData, 0, 0); +- todo_wine ok ( hSearch != NULL, "Expected FtpFindFirstFileA to pass\n" ); ++ ok( hSearch != NULL, "Expected FtpFindFirstFileA to pass\n" ); + InternetCloseHandle(hSearch); + + /* Try a valid filename in a subdirectory wildcard search */ + SetLastError(0xdeadbeef); + hSearch = FtpFindFirstFileA(hFtp, "pub/w*", &findData, 0, 0); +- todo_wine ok ( hSearch != NULL, "Expected FtpFindFirstFileA to pass\n" ); ++ ok( hSearch != NULL, "Expected FtpFindFirstFileA to pass\n" ); + InternetCloseHandle(hSearch); + + /* Try an invalid wildcard search */ +@@ -785,6 +786,24 @@ static void test_find_first_file(HINTERNET hFtp, HINTERNET hConnect) + ok ( hSearch == NULL, "Expected FtpFindFirstFileA to fail\n" ); + InternetCloseHandle(hSearch); /* Just in case */ + ++ /* change current directory, and repeat those tests - this shows ++ * that the search string is interpreted as relative directory. */ ++ success = FtpSetCurrentDirectoryA(hFtp, "pub"); ++ ok( success, "Expected FtpSetCurrentDirectory to succeed\n" ); ++ ++ SetLastError(0xdeadbeef); ++ hSearch = FtpFindFirstFileA(hFtp, "wine", &findData, 0, 0); ++ ok( hSearch != NULL, "Expected FtpFindFirstFileA to pass\n" ); ++ InternetCloseHandle(hSearch); ++ ++ SetLastError(0xdeadbeef); ++ hSearch = FtpFindFirstFileA(hFtp, "w*", &findData, 0, 0); ++ ok( hSearch != NULL, "Expected FtpFindFirstFileA to pass\n" ); ++ InternetCloseHandle(hSearch); ++ ++ success = FtpSetCurrentDirectoryA(hFtp, ".."); ++ ok( success, "Expected FtpSetCurrentDirectory to succeed\n" ); ++ + /* Try FindFirstFile between FtpOpenFile and InternetCloseHandle */ + SetLastError(0xdeadbeef); + hOpenFile = FtpOpenFileA(hFtp, "welcome.msg", GENERIC_READ, FTP_TRANSFER_TYPE_ASCII, 0); +-- +2.1.3 + diff --git a/patches/wininet-FtpFindFirstFile/definition b/patches/wininet-FtpFindFirstFile/definition new file mode 100644 index 00000000..43e57fba --- /dev/null +++ b/patches/wininet-FtpFindFirstFile/definition @@ -0,0 +1 @@ +Fixes: [16526] Fix handling of subdirectory in FtpFindFirstFile