Zebediah Figura : kernelbase: Do not initialize output params on failure in UrlGetPart().
Alexandre Julliard
julliard at winehq.org
Mon Feb 14 15:41:29 CST 2022
Module: wine
Branch: master
Commit: 1747b0b1d5958ae6f51cb5293d975cafa8a04412
URL: https://source.winehq.org/git/wine.git/?a=commit;h=1747b0b1d5958ae6f51cb5293d975cafa8a04412
Author: Zebediah Figura <zfigura at codeweavers.com>
Date: Sun Feb 13 12:44:03 2022 -0600
kernelbase: Do not initialize output params on failure in UrlGetPart().
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernelbase/path.c | 14 +++++++-------
dlls/shlwapi/tests/url.c | 13 ++++++++-----
2 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/dlls/kernelbase/path.c b/dlls/kernelbase/path.c
index 7d145e5198e..b753ce3dd2e 100644
--- a/dlls/kernelbase/path.c
+++ b/dlls/kernelbase/path.c
@@ -4321,8 +4321,6 @@ HRESULT WINAPI UrlGetPartW(const WCHAR *url, WCHAR *out, DWORD *out_len, DWORD p
if (!url || !out || !out_len || !*out_len)
return E_INVALIDARG;
- *out = '\0';
-
addr = wcschr(url, ':');
if (!addr)
scheme = URL_SCHEME_UNKNOWN;
@@ -4337,6 +4335,7 @@ HRESULT WINAPI UrlGetPartW(const WCHAR *url, WCHAR *out, DWORD *out_len, DWORD p
flags &= ~URL_PARTFLAG_KEEPSCHEME;
if (!pl.scheme_len)
{
+ *out = '\0';
*out_len = 0;
return S_FALSE;
}
@@ -4358,18 +4357,19 @@ HRESULT WINAPI UrlGetPartW(const WCHAR *url, WCHAR *out, DWORD *out_len, DWORD p
case URL_SCHEME_SNEWS:
break;
default:
- *out_len = 0;
return E_FAIL;
}
if (scheme == URL_SCHEME_FILE && (!pl.hostname_len || (pl.hostname_len == 1 && *(pl.hostname + 1) == ':')))
{
+ *out = '\0';
*out_len = 0;
return S_FALSE;
}
if (!pl.hostname_len)
{
+ *out = '\0';
*out_len = 0;
return S_FALSE;
}
@@ -4380,6 +4380,7 @@ HRESULT WINAPI UrlGetPartW(const WCHAR *url, WCHAR *out, DWORD *out_len, DWORD p
case URL_PART_USERNAME:
if (!pl.username_len)
{
+ *out = '\0';
*out_len = 0;
return S_FALSE;
}
@@ -4390,6 +4391,7 @@ HRESULT WINAPI UrlGetPartW(const WCHAR *url, WCHAR *out, DWORD *out_len, DWORD p
case URL_PART_PASSWORD:
if (!pl.password_len)
{
+ *out = '\0';
*out_len = 0;
return S_FALSE;
}
@@ -4400,6 +4402,7 @@ HRESULT WINAPI UrlGetPartW(const WCHAR *url, WCHAR *out, DWORD *out_len, DWORD p
case URL_PART_PORT:
if (!pl.port_len)
{
+ *out = '\0';
*out_len = 0;
return S_FALSE;
}
@@ -4411,6 +4414,7 @@ HRESULT WINAPI UrlGetPartW(const WCHAR *url, WCHAR *out, DWORD *out_len, DWORD p
flags &= ~URL_PARTFLAG_KEEPSCHEME;
if (!pl.query_len)
{
+ *out = '\0';
*out_len = 0;
return S_FALSE;
}
@@ -4419,17 +4423,13 @@ HRESULT WINAPI UrlGetPartW(const WCHAR *url, WCHAR *out, DWORD *out_len, DWORD p
break;
default:
- *out_len = 0;
return E_INVALIDARG;
}
if (flags == URL_PARTFLAG_KEEPSCHEME && scheme != URL_SCHEME_FILE)
{
if (!pl.scheme || !pl.scheme_len)
- {
- *out_len = 0;
return E_FAIL;
- }
schaddr = pl.scheme;
schsize = pl.scheme_len;
if (*out_len < schsize + size + 2)
diff --git a/dlls/shlwapi/tests/url.c b/dlls/shlwapi/tests/url.c
index 6a312ecff87..729b069a772 100644
--- a/dlls/shlwapi/tests/url.c
+++ b/dlls/shlwapi/tests/url.c
@@ -845,7 +845,7 @@ static void test_UrlGetPart(void)
ok(hr == (tests[i].hr == S_FALSE ? S_OK : tests[i].hr), "Got hr %#x.\n", hr);
}
- if (hr == S_OK)
+ if (SUCCEEDED(hr))
{
ok(!size, "Got size %u.\n", size);
ok(!buffer[0], "Got result %s.\n", debugstr_a(buffer));
@@ -862,9 +862,9 @@ static void test_UrlGetPart(void)
}
else
{
- todo_wine ok(size == 1, "Got size %u.\n", size);
+ ok(size == 1, "Got size %u.\n", size);
}
- todo_wine ok(!wcscmp(bufferW, L"x"), "Got result %s.\n", debugstr_w(bufferW));
+ ok(!wcscmp(bufferW, L"x"), "Got result %s.\n", debugstr_w(bufferW));
}
size = ARRAY_SIZE(bufferW);
@@ -880,8 +880,11 @@ static void test_UrlGetPart(void)
}
else
{
- todo_wine ok(size == ARRAY_SIZE(bufferW), "Got size %u.\n", size);
- todo_wine ok(!wcscmp(bufferW, L"x"), "Got result %s.\n", debugstr_w(bufferW));
+ todo_wine_if (strchr(url, '"') && part == URL_PART_USERNAME)
+ {
+ ok(size == ARRAY_SIZE(bufferW), "Got size %u.\n", size);
+ ok(!wcscmp(bufferW, L"x"), "Got result %s.\n", debugstr_w(bufferW));
+ }
}
winetest_pop_context();
More information about the wine-cvs
mailing list