You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Move 14-UrlCombineW to shlwapi-UrlCombine.
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
From 549999ab13d6078b39210a467753e8b8dfff705e Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Fri, 17 Jan 2014 01:19:41 +0100
|
||||
Subject: shlwapi/tests: Add additional tests for UrlCombine and
|
||||
UrlCanonicalize
|
||||
|
||||
---
|
||||
dlls/shlwapi/tests/url.c | 46 ++++++++++++++++++++++++++++++++++++----------
|
||||
1 file changed, 36 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/dlls/shlwapi/tests/url.c b/dlls/shlwapi/tests/url.c
|
||||
index f53a545..ecbdfab 100644
|
||||
--- a/dlls/shlwapi/tests/url.c
|
||||
+++ b/dlls/shlwapi/tests/url.c
|
||||
@@ -195,7 +195,15 @@ static const TEST_URL_CANONICALIZE TEST_CANONICALIZE[] = {
|
||||
{"res://c:\\tests/res\\foo%20bar/strange\\sth", URL_UNESCAPE, S_OK, "res://c:\\tests/res\\foo bar/strange\\sth", FALSE},
|
||||
{"A", 0, S_OK, "A", FALSE},
|
||||
{"../A", 0, S_OK, "../A", FALSE},
|
||||
+ {".\\A", 0, S_OK, ".\\A", FALSE},
|
||||
+ {"A\\.\\B", 0, S_OK, "A\\.\\B", FALSE},
|
||||
{"A/../B", 0, S_OK, "B", TRUE},
|
||||
+ {"A/../B/./../C", 0, S_OK, "C", TRUE},
|
||||
+ {"A/../B/./../C", URL_DONT_SIMPLIFY, S_OK, "A/../B/./../C", FALSE},
|
||||
+ {".", 0, S_OK, "/", TRUE},
|
||||
+ {"./A", 0, S_OK, "A", TRUE},
|
||||
+ {"A/./B", 0, S_OK, "A/B", TRUE},
|
||||
+ {"/:test\\", 0, S_OK, "/:test\\", TRUE},
|
||||
{"/uri-res/N2R?urn:sha1:B3K", URL_DONT_ESCAPE_EXTRA_INFO | URL_WININET_COMPATIBILITY /*0x82000000*/, S_OK, "/uri-res/N2R?urn:sha1:B3K", FALSE} /*LimeWire online installer calls this*/,
|
||||
{"http:www.winehq.org/dir/../index.html", 0, S_OK, "http:www.winehq.org/index.html"},
|
||||
{"http://localhost/test.html", URL_FILE_USE_PATHURL, S_OK, "http://localhost/test.html"},
|
||||
@@ -308,6 +316,7 @@ typedef struct _TEST_URL_COMBINE {
|
||||
DWORD flags;
|
||||
HRESULT expectret;
|
||||
const char *expecturl;
|
||||
+ BOOL todo;
|
||||
} TEST_URL_COMBINE;
|
||||
|
||||
static const TEST_URL_COMBINE TEST_COMBINE[] = {
|
||||
@@ -329,6 +338,15 @@ static const TEST_URL_COMBINE TEST_COMBINE[] = {
|
||||
{"http://www.winehq.org/test14#aaa/bbb#ccc", "#", 0, S_OK, "http://www.winehq.org/test14#"},
|
||||
{"http://www.winehq.org/tests/?query=x/y/z", "tests15", 0, S_OK, "http://www.winehq.org/tests/tests15"},
|
||||
{"http://www.winehq.org/tests/?query=x/y/z#example", "tests16", 0, S_OK, "http://www.winehq.org/tests/tests16"},
|
||||
+ {"http://www.winehq.org/tests17", ".", 0, S_OK, "http://www.winehq.org/", TRUE},
|
||||
+ {"http://www.winehq.org/tests18/test", ".", 0, S_OK, "http://www.winehq.org/tests18/", TRUE},
|
||||
+ {"http://www.winehq.org/tests19/test", "./", 0, S_OK, "http://www.winehq.org/tests19/", FALSE},
|
||||
+ {"http://www.winehq.org/tests20/test", "/", 0, S_OK, "http://www.winehq.org/", FALSE},
|
||||
+ {"http://www.winehq.org/tests/test", "./test21", 0, S_OK, "http://www.winehq.org/tests/test21", FALSE},
|
||||
+ {"http://www.winehq.org/tests/test", "./test22/../test", 0, S_OK, "http://www.winehq.org/tests/test", FALSE},
|
||||
+ {"http://www.winehq.org/tests/", "http://www.winehq.org:80/tests23", 0, S_OK, "http://www.winehq.org/tests23", TRUE},
|
||||
+ {"http://www.winehq.org/tests/", "tests24/./test/../test", 0, S_OK, "http://www.winehq.org/tests/tests24/test", FALSE},
|
||||
+ {"http://www.winehq.org/tests/./tests25", "./", 0, S_OK, "http://www.winehq.org/tests/", FALSE},
|
||||
{"file:///C:\\dir\\file.txt", "test.txt", 0, S_OK, "file:///C:/dir/test.txt"},
|
||||
{"file:///C:\\dir\\file.txt#hash\\hash", "test.txt", 0, S_OK, "file:///C:/dir/file.txt#hash/test.txt"},
|
||||
{"file:///C:\\dir\\file.html#hash\\hash", "test.html", 0, S_OK, "file:///C:/dir/test.html"},
|
||||
@@ -1077,7 +1095,7 @@ static void test_UrlCanonicalizeW(void)
|
||||
|
||||
/* ########################### */
|
||||
|
||||
-static void test_url_combine(const char *szUrl1, const char *szUrl2, DWORD dwFlags, HRESULT dwExpectReturn, const char *szExpectUrl)
|
||||
+static void test_url_combine(const char *szUrl1, const char *szUrl2, DWORD dwFlags, HRESULT dwExpectReturn, const char *szExpectUrl, BOOL todo)
|
||||
{
|
||||
HRESULT hr;
|
||||
CHAR szReturnUrl[INTERNET_MAX_URL_LENGTH];
|
||||
@@ -1102,34 +1120,42 @@ static void test_url_combine(const char *szUrl1, const char *szUrl2, DWORD dwFla
|
||||
dwSize = 0;
|
||||
hr = pUrlCombineA(szUrl1, szUrl2, NULL, &dwSize, dwFlags);
|
||||
ok(hr == E_POINTER, "Checking length of string, return was 0x%08x, expected 0x%08x\n", hr, E_POINTER);
|
||||
- ok(dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1);
|
||||
+ ok(todo || dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1);
|
||||
|
||||
dwSize--;
|
||||
hr = pUrlCombineA(szUrl1, szUrl2, szReturnUrl, &dwSize, dwFlags);
|
||||
ok(hr == E_POINTER, "UrlCombineA returned 0x%08x, expected 0x%08x\n", hr, E_POINTER);
|
||||
- ok(dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1);
|
||||
+ ok(todo || dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1);
|
||||
|
||||
hr = pUrlCombineA(szUrl1, szUrl2, szReturnUrl, &dwSize, dwFlags);
|
||||
ok(hr == dwExpectReturn, "UrlCombineA returned 0x%08x, expected 0x%08x\n", hr, dwExpectReturn);
|
||||
- ok(dwSize == dwExpectLen, "Got length %d, expected %d\n", dwSize, dwExpectLen);
|
||||
- if(SUCCEEDED(hr)) {
|
||||
- ok(strcmp(szReturnUrl,szExpectUrl)==0, "Expected %s, but got %s\n", szExpectUrl, szReturnUrl);
|
||||
+
|
||||
+ if (todo)
|
||||
+ {
|
||||
+ todo_wine ok(dwSize == dwExpectLen && (!SUCCEEDED(hr) || strcmp(szReturnUrl, szExpectUrl)==0),
|
||||
+ "Expected %s (len=%d), but got %s (len=%d)\n", szExpectUrl, dwExpectLen, SUCCEEDED(hr) ? szReturnUrl : "(null)", dwSize);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ ok(dwSize == dwExpectLen, "Got length %d, expected %d\n", dwSize, dwExpectLen);
|
||||
+ if (SUCCEEDED(hr))
|
||||
+ ok(strcmp(szReturnUrl, szExpectUrl)==0, "Expected %s, but got %s\n", szExpectUrl, szReturnUrl);
|
||||
}
|
||||
|
||||
if (pUrlCombineW) {
|
||||
dwSize = 0;
|
||||
hr = pUrlCombineW(wszUrl1, wszUrl2, NULL, &dwSize, dwFlags);
|
||||
ok(hr == E_POINTER, "Checking length of string, return was 0x%08x, expected 0x%08x\n", hr, E_POINTER);
|
||||
- ok(dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1);
|
||||
+ ok(todo || dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1);
|
||||
|
||||
dwSize--;
|
||||
hr = pUrlCombineW(wszUrl1, wszUrl2, wszReturnUrl, &dwSize, dwFlags);
|
||||
ok(hr == E_POINTER, "UrlCombineW returned 0x%08x, expected 0x%08x\n", hr, E_POINTER);
|
||||
- ok(dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1);
|
||||
+ ok(todo || dwSize == dwExpectLen+1, "Got length %d, expected %d\n", dwSize, dwExpectLen+1);
|
||||
|
||||
hr = pUrlCombineW(wszUrl1, wszUrl2, wszReturnUrl, &dwSize, dwFlags);
|
||||
ok(hr == dwExpectReturn, "UrlCombineW returned 0x%08x, expected 0x%08x\n", hr, dwExpectReturn);
|
||||
- ok(dwSize == dwExpectLen, "Got length %d, expected %d\n", dwSize, dwExpectLen);
|
||||
+ ok(todo || dwSize == dwExpectLen, "Got length %d, expected %d\n", dwSize, dwExpectLen);
|
||||
if(SUCCEEDED(hr)) {
|
||||
wszConvertedUrl = GetWideString(szReturnUrl);
|
||||
ok(lstrcmpW(wszReturnUrl, wszConvertedUrl)==0, "Strings didn't match between ascii and unicode UrlCombine!\n");
|
||||
@@ -1149,7 +1175,7 @@ static void test_UrlCombine(void)
|
||||
unsigned int i;
|
||||
for(i=0; i<sizeof(TEST_COMBINE)/sizeof(TEST_COMBINE[0]); i++) {
|
||||
test_url_combine(TEST_COMBINE[i].url1, TEST_COMBINE[i].url2, TEST_COMBINE[i].flags,
|
||||
- TEST_COMBINE[i].expectret, TEST_COMBINE[i].expecturl);
|
||||
+ TEST_COMBINE[i].expectret, TEST_COMBINE[i].expecturl, TEST_COMBINE[i].todo);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
1.7.9.5
|
||||
|
@@ -0,0 +1,44 @@
|
||||
From 2f01abc1d6018646cdaa94e087b1a0444c31a0c7 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Fri, 17 Jan 2014 01:27:53 +0100
|
||||
Subject: shlwapi: UrlCombineW workaround for relative paths
|
||||
|
||||
---
|
||||
dlls/shlwapi/tests/url.c | 4 ++--
|
||||
dlls/shlwapi/url.c | 5 ++++-
|
||||
2 files changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/shlwapi/tests/url.c b/dlls/shlwapi/tests/url.c
|
||||
index ecbdfab..8a99f7e 100644
|
||||
--- a/dlls/shlwapi/tests/url.c
|
||||
+++ b/dlls/shlwapi/tests/url.c
|
||||
@@ -338,8 +338,8 @@ static const TEST_URL_COMBINE TEST_COMBINE[] = {
|
||||
{"http://www.winehq.org/test14#aaa/bbb#ccc", "#", 0, S_OK, "http://www.winehq.org/test14#"},
|
||||
{"http://www.winehq.org/tests/?query=x/y/z", "tests15", 0, S_OK, "http://www.winehq.org/tests/tests15"},
|
||||
{"http://www.winehq.org/tests/?query=x/y/z#example", "tests16", 0, S_OK, "http://www.winehq.org/tests/tests16"},
|
||||
- {"http://www.winehq.org/tests17", ".", 0, S_OK, "http://www.winehq.org/", TRUE},
|
||||
- {"http://www.winehq.org/tests18/test", ".", 0, S_OK, "http://www.winehq.org/tests18/", TRUE},
|
||||
+ {"http://www.winehq.org/tests17", ".", 0, S_OK, "http://www.winehq.org/"},
|
||||
+ {"http://www.winehq.org/tests18/test", ".", 0, S_OK, "http://www.winehq.org/tests18/"},
|
||||
{"http://www.winehq.org/tests19/test", "./", 0, S_OK, "http://www.winehq.org/tests19/", FALSE},
|
||||
{"http://www.winehq.org/tests20/test", "/", 0, S_OK, "http://www.winehq.org/", FALSE},
|
||||
{"http://www.winehq.org/tests/test", "./test21", 0, S_OK, "http://www.winehq.org/tests/test21", FALSE},
|
||||
diff --git a/dlls/shlwapi/url.c b/dlls/shlwapi/url.c
|
||||
index 11589e4..58eb87c 100644
|
||||
--- a/dlls/shlwapi/url.c
|
||||
+++ b/dlls/shlwapi/url.c
|
||||
@@ -914,7 +914,10 @@ HRESULT WINAPI UrlCombineW(LPCWSTR pszBase, LPCWSTR pszRelative,
|
||||
work = preliminary + base.cchProtocol+1+base.cchSuffix - 1;
|
||||
if (*work++ != '/')
|
||||
*(work++) = '/';
|
||||
- strcpyW(work, relative.pszSuffix);
|
||||
+ if (relative.pszSuffix[0] == '.' && relative.pszSuffix[1] == 0)
|
||||
+ *work = 0;
|
||||
+ else
|
||||
+ strcpyW(work, relative.pszSuffix);
|
||||
break;
|
||||
|
||||
default:
|
||||
--
|
||||
1.7.9.5
|
||||
|
4
patches/shlwapi-UrlCombine/definition
Normal file
4
patches/shlwapi-UrlCombine/definition
Normal file
@@ -0,0 +1,4 @@
|
||||
Author: Sebastian Lackner
|
||||
Subject: Workaround for broken implementation of shlwapi url functions.
|
||||
Revision: 1
|
||||
Fixes: Workaround for shlwapi URLs with relative paths
|
Reference in New Issue
Block a user