ReactOS 0.4.15-dev-8093-g3285f69
url.c
Go to the documentation of this file.
1/*
2 * Wininet - URL tests
3 *
4 * Copyright 2002 Aric Stewart
5 * Copyright 2004 Mike McCormack
6 * Copyright 2005 Hans Leidekker
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 */
22
23#include <stdarg.h>
24#include <stdio.h>
25#include <stdlib.h>
26#include <string.h>
27
28#include "windef.h"
29#include "winbase.h"
30#include "winnls.h"
31#include "wininet.h"
32
33#include "wine/test.h"
34
35#define TEST_URL "http://www.winehq.org/site/about#hi"
36#define TEST_URL3 "file:///C:/Program%20Files/Atmel/AVR%20Tools/STK500/STK500.xml"
37
38#define CREATE_URL1 "http://username:password@www.winehq.org/site/about"
39#define CREATE_URL2 "http://username@www.winehq.org/site/about"
40#define CREATE_URL3 "http://username:"
41#define CREATE_URL4 "http://www.winehq.org/site/about"
42#define CREATE_URL5 "http://"
43#define CREATE_URL6 "nhttp://username:password@www.winehq.org:80/site/about"
44#define CREATE_URL7 "http://username:password@www.winehq.org:42/site/about"
45#define CREATE_URL8 "https://username:password@www.winehq.org/site/about"
46#define CREATE_URL9 "about:blank"
47#define CREATE_URL10 "about://host/blank"
48#define CREATE_URL11 "about:"
49#define CREATE_URL12 "http://www.winehq.org:65535"
50#define CREATE_URL13 "http://localhost/?test=123"
51
52static void copy_compsA(
55 DWORD scheLen,
56 DWORD hostLen,
57 DWORD userLen,
58 DWORD passLen,
59 DWORD pathLen,
60 DWORD extrLen )
61{
62 *dst = *src;
63 dst->dwSchemeLength = scheLen;
64 dst->dwHostNameLength = hostLen;
65 dst->dwUserNameLength = userLen;
66 dst->dwPasswordLength = passLen;
67 dst->dwUrlPathLength = pathLen;
68 dst->dwExtraInfoLength = extrLen;
69 SetLastError(0xfaceabad);
70}
71
72static void zero_compsA(
74 DWORD scheLen,
75 DWORD hostLen,
76 DWORD userLen,
77 DWORD passLen,
78 DWORD pathLen,
79 DWORD extrLen )
80{
82 dst->dwStructSize = sizeof(URL_COMPONENTSA);
83 dst->dwSchemeLength = scheLen;
84 dst->dwHostNameLength = hostLen;
85 dst->dwUserNameLength = userLen;
86 dst->dwPasswordLength = passLen;
87 dst->dwUrlPathLength = pathLen;
88 dst->dwExtraInfoLength = extrLen;
89 SetLastError(0xfaceabad);
90}
91
92typedef struct {
93 const char *url;
109 const char *exp_scheme;
110 const char *exp_hostname;
111 const char *exp_username;
112 const char *exp_password;
113 const char *exp_urlpath;
114 const char *exp_extrainfo;
116
118 {"http://www.winehq.org/site/about#hi",
119 0, 4, INTERNET_SCHEME_HTTP, 7, 14, -1, 80, -1, 0, -1, 0, 21, 11, 32, 3,
120 "http", "www.winehq.org", "", "", "/site/about", "#hi"},
121 {"http://www.myserver.com/myscript.php?arg=1",
122 0, 4, INTERNET_SCHEME_HTTP, 7, 16, -1, 80, -1, 0, -1, 0, 23, 13, 36, 6,
123 "http", "www.myserver.com", "", "", "/myscript.php", "?arg=1"},
124 {"http://www.winehq.org?test=123",
125 0, 4, INTERNET_SCHEME_HTTP, 7, 14, 23, 80, -1, 0, -1, 0, 21, 0, 21, 9,
126 "http", "www.winehq.org", "", "", "", "?test=123"},
127 {"http://www.winehq.org/myscript.php;test=123",
128 0, 4, INTERNET_SCHEME_HTTP, 7, 14, 23, 80, -1, 0, -1, 0, 21, 22, -1, 0,
129 "http", "www.winehq.org", "", "", "/myscript.php;test=123", ""},
130 {"HtTp://www.winehq.org/scheme",
131 0, 4, INTERNET_SCHEME_HTTP, 7, 14, 23, 80, -1, 0, -1, 0, 21, 7, -1, 0,
132 "HtTp", "www.winehq.org", "", "", "/scheme", ""},
133 {"http://www.winehq.org",
134 0, 4, INTERNET_SCHEME_HTTP, 7, 14, 23, 80, -1, 0, -1, 0, 21, 0, -1, 0,
135 "http", "www.winehq.org", "", "", "", ""},
136 {"file:///C:/Program%20Files/Atmel/AVR%20Tools/STK500/STK500.xml",
137 0, 4, INTERNET_SCHEME_FILE, -1, 0, -1, 0, -1, 0, -1, 0, 7, 55, -1, 0,
138 "file", "", "", "", "C:\\Program Files\\Atmel\\AVR Tools\\STK500\\STK500.xml", ""},
139 {"fide:///C:/Program%20Files/Atmel/AVR%20Tools/STK500/STK500.xml",
140 0, 4, INTERNET_SCHEME_UNKNOWN, 7, 0, -1, 0, -1, 0, -1, 0, 7, 55, -1, 0,
141 "fide", "", "", "", "/C:/Program%20Files/Atmel/AVR%20Tools/STK500/STK500.xml", ""},
142 {"file://C:/Program%20Files/Atmel/AVR%20Tools/STK500/STK500.xml",
143 0, 4, INTERNET_SCHEME_FILE, -1, 0, -1, 0, -1, 0, -1, 0, 7, 54, -1, 0,
144 "file", "", "", "", "C:\\Program%20Files\\Atmel\\AVR%20Tools\\STK500\\STK500.xml", ""},
145 {"file://C:/Program%20Files/Atmel/..",
146 0, 4, INTERNET_SCHEME_FILE, -1, 0, -1, 0, -1, 0, -1, 0, 7, 27, -1, 0,
147 "file", "", "", "", "C:\\Program%20Files\\Atmel\\..\\", ""},
148 {"file://C:/Program%20Files/Atmel/../Asdf.xml",
149 0, 4, INTERNET_SCHEME_FILE, -1, 0, -1, 0, -1, 0, -1, 0, 7, 36, -1, 0,
150 "file", "", "", "", "C:\\Program%20Files\\Atmel\\..\\Asdf.xml", ""},
151 {"file:///C:/Program%20Files/Atmel/..",
152 0, 4, INTERNET_SCHEME_FILE, -1, 0, -1, 0, -1, 0, -1, 0, 7, 28, -1, 0,
153 "file", "", "", "", "C:\\Program Files\\Atmel\\..\\", ""},
154 {"file:///C:/Program%20Files/Atmel/../Asdf.xml",
155 0, 4, INTERNET_SCHEME_FILE, -1, 0, -1, 0, -1, 0, -1, 0, 7, 37, -1, 0,
156 "file", "", "", "", "C:\\Program Files\\Atmel\\..\\Asdf.xml", ""},
157 {"file://C:/Program%20Files/Atmel/.",
158 0, 4, INTERNET_SCHEME_FILE, -1, 0, -1, 0, -1, 0, -1, 0, 7, 26, -1, 0,
159 "file", "", "", "", "C:\\Program%20Files\\Atmel\\.\\", ""},
160 {"file://C:/Program%20Files/Atmel/./Asdf.xml",
161 0, 4, INTERNET_SCHEME_FILE, -1, 0, -1, 0, -1, 0, -1, 0, 7, 35, -1, 0,
162 "file", "", "", "", "C:\\Program%20Files\\Atmel\\.\\Asdf.xml", ""},
163 {"file:///C:/Program%20Files/Atmel/.",
164 0, 4, INTERNET_SCHEME_FILE, -1, 0, -1, 0, -1, 0, -1, 0, 7, 27, -1, 0,
165 "file", "", "", "", "C:\\Program Files\\Atmel\\.\\", ""},
166 {"file:///C:/Program%20Files/Atmel/./Asdf.xml",
167 0, 4, INTERNET_SCHEME_FILE, -1, 0, -1, 0, -1, 0, -1, 0, 7, 36, -1, 0,
168 "file", "", "", "", "C:\\Program Files\\Atmel\\.\\Asdf.xml", ""},
169 {"C:\\file.txt",
170 0, 1, INTERNET_SCHEME_UNKNOWN, -1, 0, -1, 0, -1, 0, -1, 0, 2, 9, -1, 0,
171 "C", "", "", "", "\\file.txt", ""},
172 {"res://IELib.dll/test.htm",
173 0, 3, INTERNET_SCHEME_RES, 6, 9, -1, 0, -1, 0, -1, 0, 15, 9, -1, 0,
174 "res", "IELib.dll", "", "", "/test.htm", ""},
175 {"gopher://www.winehq.org/site/about#hi",
176 0, 6, INTERNET_SCHEME_GOPHER, 9, 14, -1, 0, -1, 0, -1, 0, 23, 11, 34, 3,
177 "gopher", "www.winehq.org", "", "", "/site/about", "#hi"},
178};
179
180static WCHAR *a2w(const char *str)
181{
182 WCHAR *ret;
183 int len;
184
185 len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
186 ret = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
188 return ret;
189}
190
191static int strcmp_wa(const WCHAR *str1, const char *str2)
192{
193 WCHAR *str2w = a2w(str2);
194 int ret = lstrcmpW(str1, str2w);
195 HeapFree(GetProcessHeap(), 0, str2w);
196 return ret;
197}
198
200{
201 URL_COMPONENTSW urlw;
203 char *scheme_a, *hostname_a, *username_a;
204 char *password_a, *extrainfo_a, *urlpath_a;
205 WCHAR *scheme_w, *hostname_w, *username_w;
206 WCHAR *password_w, *extrainfo_w, *urlpath_w;
207 size_t buf_len = strlen(test->url);
208 WCHAR *buf;
209 BOOL b;
210
211 /* test InternetCrackUrlA with NULL buffers */
212 zero_compsA(&url, 1, 1, 1, 1, 1, 1);
213
214 b = InternetCrackUrlA(test->url, strlen(test->url), 0, &url);
215 ok(b, "InternetCrackUrl failed with error %d\n", GetLastError());
216
217 if(test->scheme_off == -1)
218 ok(!url.lpszScheme, "[%s] url.lpszScheme = %p, expected NULL\n", test->url, url.lpszScheme);
219 else
220 ok(url.lpszScheme == test->url+test->scheme_off, "[%s] url.lpszScheme = %p, expected %p\n",
221 test->url, url.lpszScheme, test->url+test->scheme_off);
222 ok(url.dwSchemeLength == test->scheme_len, "[%s] url.lpszSchemeLength = %d, expected %d\n",
223 test->url, url.dwSchemeLength, test->scheme_len);
224
225 ok(url.nScheme == test->scheme, "[%s] url.nScheme = %d, expected %d\n", test->url, url.nScheme, test->scheme);
226
227 if(test->host_off == -1)
228 ok(!url.lpszHostName, "[%s] url.lpszHostName = %p, expected NULL\n", test->url, url.lpszHostName);
229 else
230 ok(url.lpszHostName == test->url+test->host_off, "[%s] url.lpszHostName = %p, expected %p\n",
231 test->url, url.lpszHostName, test->url+test->host_off);
232 if(test->host_skip_broken != -1 && url.dwHostNameLength == test->host_skip_broken) {
233 win_skip("skipping broken dwHostNameLength result\n");
234 return;
235 }
236 ok(url.dwHostNameLength == test->host_len, "[%s] url.lpszHostNameLength = %d, expected %d\n",
237 test->url, url.dwHostNameLength, test->host_len);
238
239 ok(url.nPort == test->port, "[%s] nPort = %d, expected %d\n", test->url, url.nPort, test->port);
240
241 if(test->user_off == -1)
242 ok(!url.lpszUserName, "[%s] url.lpszUserName = %p\n", test->url, url.lpszUserName);
243 else
244 ok(url.lpszUserName == test->url+test->user_off, "[%s] url.lpszUserName = %p, expected %p\n",
245 test->url, url.lpszUserName, test->url+test->user_off);
246 ok(url.dwUserNameLength == test->user_len, "[%s] url.lpszUserNameLength = %d, expected %d\n",
247 test->url, url.dwUserNameLength, test->user_len);
248
249 if(test->pass_off == -1)
250 ok(!url.lpszPassword, "[%s] url.lpszPassword = %p\n", test->url, url.lpszPassword);
251 else
252 ok(url.lpszPassword == test->url+test->pass_off, "[%s] url.lpszPassword = %p, expected %p\n",
253 test->url, url.lpszPassword, test->url+test->pass_off);
254 ok(url.dwPasswordLength == test->pass_len, "[%s] url.lpszPasswordLength = %d, expected %d\n",
255 test->url, url.dwPasswordLength, test->pass_len);
256
257 if(test->path_off == -1)
258 ok(!url.lpszUrlPath, "[%s] url.lpszUrlPath = %p, expected NULL\n", test->url, url.lpszUrlPath);
259 else
260 ok(url.lpszUrlPath == test->url+test->path_off, "[%s] url.lpszUrlPath = %p, expected %p\n",
261 test->url, url.lpszUrlPath, test->url+test->path_off);
262 ok(url.dwUrlPathLength == test->path_len, "[%s] url.lpszUrlPathLength = %d, expected %d\n",
263 test->url, url.dwUrlPathLength, test->path_len);
264
265 if(test->extra_off == -1)
266 ok(!url.lpszExtraInfo, "[%s] url.lpszExtraInfo = %p, expected NULL\n", test->url, url.lpszExtraInfo);
267 else
268 ok(url.lpszExtraInfo == test->url+test->extra_off, "[%s] url.lpszExtraInfo = %p, expected %p\n",
269 test->url, url.lpszExtraInfo, test->url+test->extra_off);
270 ok(url.dwExtraInfoLength == test->extra_len, "[%s] url.lpszExtraInfoLength = %d, expected %d\n",
271 test->url, url.dwExtraInfoLength, test->extra_len);
272
273 /* test InternetCrackUrlW with NULL buffers */
274 memset(&urlw, 0, sizeof(URL_COMPONENTSW));
275 urlw.dwStructSize = sizeof(URL_COMPONENTSW);
276 urlw.dwSchemeLength = 1;
277 urlw.dwHostNameLength = 1;
278 urlw.dwUserNameLength = 1;
279 urlw.dwPasswordLength = 1;
280 urlw.dwUrlPathLength = 1;
281 urlw.dwExtraInfoLength = 1;
282
283 buf = a2w(test->url);
284 b = InternetCrackUrlW(buf, lstrlenW(buf), 0, &urlw);
286 win_skip("InternetCrackUrlW is not implemented\n");
288 return;
289 }
290 ok(b, "InternetCrackUrl failed with error %d\n", GetLastError());
291
292 if(test->scheme_off == -1)
293 ok(!urlw.lpszScheme, "[%s] urlw.lpszScheme = %p, expected NULL\n", test->url, urlw.lpszScheme);
294 else
295 ok(urlw.lpszScheme == buf+test->scheme_off, "[%s] urlw.lpszScheme = %p, expected %p\n",
296 test->url, urlw.lpszScheme, buf+test->scheme_off);
297 ok(urlw.dwSchemeLength == test->scheme_len, "[%s] urlw.lpszSchemeLength = %d, expected %d\n",
298 test->url, urlw.dwSchemeLength, test->scheme_len);
299
300 ok(urlw.nScheme == test->scheme, "[%s] urlw.nScheme = %d, expected %d\n", test->url, urlw.nScheme, test->scheme);
301
302 if(test->host_off == -1) {
303 ok(!urlw.lpszHostName, "[%s] urlw.lpszHostName = %p, expected NULL\n", test->url, urlw.lpszHostName);
304 ok(urlw.dwHostNameLength == 0 || broken(urlw.dwHostNameLength == 1), "[%s] urlw.lpszHostNameLength = %d, expected %d\n",
305 test->url, urlw.dwHostNameLength, test->host_len);
306 }else {
307 ok(urlw.lpszHostName == buf+test->host_off, "[%s] urlw.lpszHostName = %p, expected %p\n",
308 test->url, urlw.lpszHostName, test->url+test->host_off);
309 ok(urlw.dwHostNameLength == test->host_len, "[%s] urlw.lpszHostNameLength = %d, expected %d\n",
310 test->url, urlw.dwHostNameLength, test->host_len);
311 }
312
313 ok(urlw.nPort == test->port, "[%s] nPort = %d, expected %d\n", test->url, urlw.nPort, test->port);
314
315 if(test->user_off == -1) {
316 ok(!urlw.lpszUserName, "[%s] urlw.lpszUserName = %p\n", test->url, urlw.lpszUserName);
317 ok(urlw.dwUserNameLength == 0 || broken(urlw.dwUserNameLength == 1), "[%s] urlw.lpszUserNameLength = %d, expected %d\n",
318 test->url, urlw.dwUserNameLength, test->user_len);
319 }else {
320 ok(urlw.lpszUserName == buf+test->user_off, "[%s] urlw.lpszUserName = %p, expected %p\n",
321 test->url, urlw.lpszUserName, buf+test->user_off);
322 ok(urlw.dwUserNameLength == test->user_len, "[%s] urlw.lpszUserNameLength = %d, expected %d\n",
323 test->url, urlw.dwUserNameLength, test->user_len);
324 }
325
326 if(test->pass_off == -1) {
327 ok(!urlw.lpszPassword, "[%s] urlw.lpszPassword = %p\n", test->url, urlw.lpszPassword);
328 ok(urlw.dwPasswordLength == 0 || broken(urlw.dwPasswordLength), "[%s] urlw.lpszPasswordLength = %d, expected %d\n",
329 test->url, urlw.dwPasswordLength, test->pass_len);
330 }else {
331 ok(urlw.lpszPassword == buf+test->pass_off, "[%s] urlw.lpszPassword = %p, expected %p\n",
332 test->url, urlw.lpszPassword, buf+test->pass_off);
333 ok(urlw.dwPasswordLength == test->pass_len, "[%s] urlw.lpszPasswordLength = %d, expected %d\n",
334 test->url, urlw.dwPasswordLength, test->pass_len);
335 }
336
337 if(test->path_off == -1)
338 ok(!urlw.lpszUrlPath, "[%s] urlw.lpszUrlPath = %p, expected NULL\n", test->url, urlw.lpszUrlPath);
339 else
340 ok(urlw.lpszUrlPath == buf+test->path_off, "[%s] urlw.lpszUrlPath = %p, expected %p\n",
341 test->url, urlw.lpszUrlPath, buf+test->path_off);
342 ok(urlw.dwUrlPathLength == test->path_len, "[%s] urlw.lpszUrlPathLength = %d, expected %d\n",
343 test->url, urlw.dwUrlPathLength, test->path_len);
344
345 if(test->extra_off == -1) {
346 ok(!urlw.lpszExtraInfo, "[%s] url.lpszExtraInfo = %p, expected NULL\n", test->url, urlw.lpszExtraInfo);
347 ok(urlw.dwExtraInfoLength == 0 || broken(urlw.dwExtraInfoLength == 1), "[%s] urlw.lpszExtraInfoLength = %d, expected %d\n",
348 test->url, urlw.dwExtraInfoLength, test->extra_len);
349 }else {
350 ok(urlw.lpszExtraInfo == buf+test->extra_off, "[%s] urlw.lpszExtraInfo = %p, expected %p\n",
351 test->url, urlw.lpszExtraInfo, buf+test->extra_off);
352 ok(urlw.dwExtraInfoLength == test->extra_len, "[%s] urlw.lpszExtraInfoLength = %d, expected %d\n",
353 test->url, urlw.dwExtraInfoLength, test->extra_len);
354 }
355
356 /* test InternetCrackUrlA with valid buffers */
357 scheme_a = (char*)(scheme_w = HeapAlloc(GetProcessHeap(), 0, buf_len*sizeof(WCHAR)));
358 hostname_a = (char*)(hostname_w = HeapAlloc(GetProcessHeap(), 0, buf_len*sizeof(WCHAR)));
359 username_a = (char*)(username_w = HeapAlloc(GetProcessHeap(), 0, buf_len*sizeof(WCHAR)));
360 password_a = (char*)(password_w = HeapAlloc(GetProcessHeap(), 0, buf_len*sizeof(WCHAR)));
361 urlpath_a = (char*)(urlpath_w = HeapAlloc(GetProcessHeap(), 0, buf_len*sizeof(WCHAR)));
362 extrainfo_a = (char*)(extrainfo_w = HeapAlloc(GetProcessHeap(), 0, buf_len*sizeof(WCHAR)));
363 memset(&url, 0, sizeof(URL_COMPONENTSA));
364 url.dwStructSize = sizeof(URL_COMPONENTSA);
365 url.lpszScheme = scheme_a;
366 url.dwSchemeLength = buf_len;
367 url.lpszHostName = hostname_a;
368 url.dwHostNameLength = buf_len;
369 url.lpszUserName = username_a;
370 url.dwUserNameLength = buf_len;
371 url.lpszPassword = password_a;
372 url.dwPasswordLength = buf_len;
373 url.lpszUrlPath = urlpath_a;
374 url.dwUrlPathLength = buf_len;
375 url.lpszExtraInfo = extrainfo_a;
376 url.dwExtraInfoLength = buf_len;
377
378 b = InternetCrackUrlA(test->url, strlen(test->url), 0, &url);
379 ok(b, "InternetCrackUrlA failed with error %d\n", GetLastError());
380
381 ok(url.dwSchemeLength == strlen(test->exp_scheme), "[%s] Got wrong scheme length: %d\n",
382 test->url, url.dwSchemeLength);
383 ok(!strcmp(scheme_a, test->exp_scheme), "[%s] Got wrong scheme, expected: %s, got: %s\n",
384 test->url, test->exp_scheme, scheme_a);
385
386 ok(url.nScheme == test->scheme, "[%s] Got wrong nScheme, expected: %d, got: %d\n",
387 test->url, test->scheme, url.nScheme);
388
389 ok(url.dwHostNameLength == strlen(test->exp_hostname), "[%s] Got wrong hostname length: %d\n",
390 test->url, url.dwHostNameLength);
391 ok(!strcmp(hostname_a, test->exp_hostname), "[%s] Got wrong hostname, expected: %s, got: %s\n",
392 test->url, test->exp_hostname, hostname_a);
393
394 ok(url.nPort == test->port, "[%s] Got wrong port, expected: %d, got: %d\n",
395 test->url, test->port, url.nPort);
396
397 ok(url.dwUserNameLength == strlen(test->exp_username), "[%s] Got wrong username length: %d\n",
398 test->url, url.dwUserNameLength);
399 ok(!strcmp(username_a, test->exp_username), "[%s] Got wrong username, expected: %s, got: %s\n",
400 test->url, test->exp_username, username_a);
401
402 ok(url.dwPasswordLength == strlen(test->exp_password), "[%s] Got wrong password length: %d\n",
403 test->url, url.dwPasswordLength);
404 ok(!strcmp(password_a, test->exp_password), "[%s] Got wrong password, expected: %s, got: %s\n",
405 test->url, test->exp_password, password_a);
406
407 ok(url.dwUrlPathLength == strlen(test->exp_urlpath), "[%s] Got wrong urlpath length: %d\n",
408 test->url, url.dwUrlPathLength);
409 ok(!strcmp(urlpath_a, test->exp_urlpath), "[%s] Got wrong urlpath, expected: %s, got: %s\n",
410 test->url, test->exp_urlpath, urlpath_a);
411
412 ok(url.dwExtraInfoLength == strlen(test->exp_extrainfo), "[%s] Got wrong extrainfo length: %d\n",
413 test->url, url.dwExtraInfoLength);
414 ok(!strcmp(extrainfo_a, test->exp_extrainfo), "[%s] Got wrong extrainfo, expected: %s, got: %s\n",
415 test->url, test->exp_extrainfo, extrainfo_a);
416
417 /* test InternetCrackUrlW with valid buffers */
418 memset(&urlw, 0, sizeof(URL_COMPONENTSW));
419 urlw.dwStructSize = sizeof(URL_COMPONENTSW);
420 urlw.lpszScheme = scheme_w;
421 urlw.dwSchemeLength = buf_len;
422 urlw.lpszHostName = hostname_w;
423 urlw.dwHostNameLength = buf_len;
424 urlw.lpszUserName = username_w;
425 urlw.dwUserNameLength = buf_len;
426 urlw.lpszPassword = password_w;
427 urlw.dwPasswordLength = buf_len;
428 urlw.lpszUrlPath = urlpath_w;
429 urlw.dwUrlPathLength = buf_len;
430 urlw.lpszExtraInfo = extrainfo_w;
431 urlw.dwExtraInfoLength = buf_len;
432
433 b = InternetCrackUrlW(buf, lstrlenW(buf), 0, &urlw);
434 ok(b, "InternetCrackUrlW failed with error %d\n", GetLastError());
435
436 ok(urlw.dwSchemeLength == strlen(test->exp_scheme), "[%s] Got wrong scheme length: %d\n",
437 test->url, urlw.dwSchemeLength);
438 ok(!strcmp_wa(scheme_w, test->exp_scheme), "[%s] Got wrong scheme, expected: %s, got: %s\n",
439 test->url, test->exp_scheme, wine_dbgstr_w(scheme_w));
440
441 ok(urlw.nScheme == test->scheme, "[%s] Got wrong nScheme, expected: %d, got: %d\n",
442 test->url, test->scheme, urlw.nScheme);
443
444 ok(urlw.dwHostNameLength == strlen(test->exp_hostname), "[%s] Got wrong hostname length: %d\n",
445 test->url, urlw.dwHostNameLength);
446 ok(!strcmp_wa(hostname_w, test->exp_hostname), "[%s] Got wrong hostname, expected: %s, got: %s\n",
447 test->url, test->exp_hostname, wine_dbgstr_w(hostname_w));
448
449 ok(urlw.nPort == test->port, "[%s] Got wrong port, expected: %d, got: %d\n",
450 test->url, test->port, urlw.nPort);
451
452 ok(urlw.dwUserNameLength == strlen(test->exp_username), "[%s] Got wrong username length: %d\n",
453 test->url, urlw.dwUserNameLength);
454 ok(!strcmp_wa(username_w, test->exp_username), "[%s] Got wrong username, expected: %s, got: %s\n",
455 test->url, test->exp_username, wine_dbgstr_w(username_w));
456
457 ok(urlw.dwPasswordLength == strlen(test->exp_password), "[%s] Got wrong password length: %d\n",
458 test->url, urlw.dwPasswordLength);
459 ok(!strcmp_wa(password_w, test->exp_password), "[%s] Got wrong password, expected: %s, got: %s\n",
460 test->url, test->exp_password, wine_dbgstr_w(password_w));
461
462 ok(urlw.dwUrlPathLength == strlen(test->exp_urlpath), "[%s] Got wrong urlpath length: %d\n",
463 test->url, urlw.dwUrlPathLength);
464 ok(!strcmp_wa(urlpath_w, test->exp_urlpath), "[%s] Got wrong urlpath, expected: %s, got: %s\n",
465 test->url, test->exp_urlpath, wine_dbgstr_w(urlpath_w));
466
467 ok(urlw.dwExtraInfoLength == strlen(test->exp_extrainfo), "[%s] Got wrong extrainfo length: %d\n",
468 test->url, urlw.dwExtraInfoLength);
469 ok(!strcmp_wa(extrainfo_w, test->exp_extrainfo), "[%s] Got wrong extrainfo, expected: %s, got: %s\n",
470 test->url, test->exp_extrainfo, wine_dbgstr_w(extrainfo_w));
471
472 HeapFree(GetProcessHeap(), 0, scheme_w);
473 HeapFree(GetProcessHeap(), 0, hostname_w);
474 HeapFree(GetProcessHeap(), 0, username_w);
475 HeapFree(GetProcessHeap(), 0, password_w);
476 HeapFree(GetProcessHeap(), 0, urlpath_w);
477 HeapFree(GetProcessHeap(), 0, extrainfo_w);
479}
480
481static void test_long_url(void)
482{
483 char long_buf[6000];
484 char long_url[sizeof(long_buf) + 1000];
485 crack_url_test_t test_long_path =
486 {long_url, 0, 4, INTERNET_SCHEME_HTTP, 7, 14, -1, 80, -1, 0, -1, 0, 21, sizeof(long_buf)-1, -1, 0,
487 "http", "www.winehq.org", "", "", long_buf, ""};
488 crack_url_test_t test_long_extra =
489 {long_url, 0, 4, INTERNET_SCHEME_HTTP, 7, 14, -1, 80, -1, 0, -1, 0, 21, 6, 27, sizeof(long_buf)-1,
490 "http", "www.winehq.org", "", "", "/path/", long_buf};
491 URL_COMPONENTSA url_comp;
492 BOOL b;
493
494 memset(long_buf, 'x', sizeof(long_buf));
495 long_buf[0] = '/';
496 long_buf[sizeof(long_buf)-1] = 0;
497
498 strcpy(long_url, "http://www.winehq.org");
499 strcat(long_url, long_buf);
500 test_crack_url(&test_long_path);
501
502 strcpy(long_url, "http://www.winehq.org/path/");
503 long_buf[0] = '#';
504 strcat(long_url, long_buf);
505 test_crack_url(&test_long_extra);
506
507 zero_compsA(&url_comp, 0, 0, 0, 0, 0, 100);
508 url_comp.lpszExtraInfo = long_buf;
509 b = InternetCrackUrlA(long_url, strlen(long_url), 0, &url_comp);
510 ok(!b && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "InternetCrackUrlA returned %x with error %d\n", b, GetLastError());
511
512 zero_compsA(&url_comp, 4, 0, 0, 0, 0, 0);
513 url_comp.lpszScheme = long_buf;
514 b = InternetCrackUrlA(long_url, strlen(long_url), 0, &url_comp);
515 ok(!b && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "InternetCrackUrlA returned %x with error %d\n", b, GetLastError());
516}
517
518static void InternetCrackUrl_test(void)
519{
520 URL_COMPONENTSA urlSrc, urlComponents;
521 char protocol[32], hostName[1024], userName[1024];
522 char password[1024], extra[1024], path[1024];
523 BOOL ret, firstret;
524 DWORD GLE, firstGLE;
525
526 ZeroMemory(&urlSrc, sizeof(urlSrc));
527 urlSrc.dwStructSize = sizeof(urlSrc);
528 urlSrc.lpszScheme = protocol;
529 urlSrc.lpszHostName = hostName;
530 urlSrc.lpszUserName = userName;
531 urlSrc.lpszPassword = password;
532 urlSrc.lpszUrlPath = path;
533 urlSrc.lpszExtraInfo = extra;
534
535 /* Tests for lpsz* members pointing to real strings while
536 * some corresponding length members are set to zero.
537 * As of IE7 (wininet 7.0*?) all members are checked. So we
538 * run the first test and expect the outcome to be the same
539 * for the first four (scheme, hostname, username and password).
540 * The last two (path and extrainfo) are the same for all versions
541 * of the wininet.dll.
542 */
543 copy_compsA(&urlSrc, &urlComponents, 0, 1024, 1024, 1024, 1024, 1024);
544 SetLastError(0xdeadbeef);
545 firstret = InternetCrackUrlA(TEST_URL3, 0, ICU_DECODE, &urlComponents);
546 firstGLE = GetLastError();
547
548 copy_compsA(&urlSrc, &urlComponents, 32, 0, 1024, 1024, 1024, 1024);
549 SetLastError(0xdeadbeef);
550 ret = InternetCrackUrlA(TEST_URL3, 0, ICU_DECODE, &urlComponents);
551 GLE = GetLastError();
552 ok(ret==firstret && (GLE==firstGLE), "InternetCrackUrl returned %d with GLE=%d (expected to return %d)\n",
553 ret, GLE, firstret);
554
555 copy_compsA(&urlSrc, &urlComponents, 32, 1024, 0, 1024, 1024, 1024);
556 SetLastError(0xdeadbeef);
557 ret = InternetCrackUrlA(TEST_URL3, 0, ICU_DECODE, &urlComponents);
558 GLE = GetLastError();
559 ok(ret==firstret && (GLE==firstGLE), "InternetCrackUrl returned %d with GLE=%d (expected to return %d)\n",
560 ret, GLE, firstret);
561
562 copy_compsA(&urlSrc, &urlComponents, 32, 1024, 1024, 0, 1024, 1024);
563 SetLastError(0xdeadbeef);
564 ret = InternetCrackUrlA(TEST_URL3, 0, ICU_DECODE, &urlComponents);
565 GLE = GetLastError();
566 ok(ret==firstret && (GLE==firstGLE), "InternetCrackUrl returned %d with GLE=%d (expected to return %d)\n",
567 ret, GLE, firstret);
568
569 copy_compsA(&urlSrc, &urlComponents, 32, 1024, 1024, 1024, 0, 1024);
570 SetLastError(0xdeadbeef);
571 ret = InternetCrackUrlA(TEST_URL3, 0, ICU_DECODE, &urlComponents);
572 GLE = GetLastError();
575 "InternetCrackUrl returned %d with GLE=%d (expected to return 0 and ERROR_INVALID_HANDLE or ERROR_INSUFFICIENT_BUFFER)\n",
576 ret, GLE);
577
578 copy_compsA(&urlSrc, &urlComponents, 32, 1024, 1024, 1024, 1024, 0);
579 SetLastError(0xdeadbeef);
580 ret = InternetCrackUrlA(TEST_URL3, 0, ICU_DECODE, &urlComponents);
581 GLE = GetLastError();
584 "InternetCrackUrl returned %d with GLE=%d (expected to return 0 and ERROR_INVALID_HANDLE or ERROR_INSUFFICIENT_BUFFER)\n",
585 ret, GLE);
586
587 copy_compsA(&urlSrc, &urlComponents, 0, 0, 0, 0, 0, 0);
588 ret = InternetCrackUrlA(TEST_URL3, 0, ICU_DECODE, &urlComponents);
589 GLE = GetLastError();
592 "InternetCrackUrl returned %d with GLE=%d (expected to return 0 and ERROR_INVALID_PARAMETER)\n",
593 ret, GLE);
594
595 copy_compsA(&urlSrc, &urlComponents, 32, 1024, 1024, 1024, 1024, 1024);
596 ret = InternetCrackUrlA("about://host/blank", 0,0,&urlComponents);
597 ok(ret, "InternetCrackUrl failed with %d\n", GetLastError());
598 ok(!strcmp(urlComponents.lpszScheme, "about"), "lpszScheme was \"%s\" instead of \"about\"\n", urlComponents.lpszScheme);
599 ok(!strcmp(urlComponents.lpszHostName, "host"), "lpszHostName was \"%s\" instead of \"host\"\n", urlComponents.lpszHostName);
600 ok(!strcmp(urlComponents.lpszUrlPath, "/blank"), "lpszUrlPath was \"%s\" instead of \"/blank\"\n", urlComponents.lpszUrlPath);
601
602 /* try a NULL lpszUrl */
603 SetLastError(0xdeadbeef);
604 copy_compsA(&urlSrc, &urlComponents, 32, 1024, 1024, 1024, 1024, 1024);
605 ret = InternetCrackUrlA(NULL, 0, 0, &urlComponents);
606 GLE = GetLastError();
607 ok(ret == FALSE, "Expected InternetCrackUrl to fail\n");
608 ok(GLE == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GLE);
609
610 /* try an empty lpszUrl, GetLastError returns 12006, whatever that means
611 * we just need to fail and not return success
612 */
613 SetLastError(0xdeadbeef);
614 copy_compsA(&urlSrc, &urlComponents, 32, 1024, 1024, 1024, 1024, 1024);
615 ret = InternetCrackUrlA("", 0, 0, &urlComponents);
616 GLE = GetLastError();
617 ok(ret == FALSE, "Expected InternetCrackUrl to fail\n");
618 ok(GLE != 0xdeadbeef && GLE != ERROR_SUCCESS, "Expected GLE to represent a failure\n");
619
620 /* Invalid Call: must set size of components structure (Windows only
621 * enforces this on the InternetCrackUrlA version of the call) */
622 copy_compsA(&urlSrc, &urlComponents, 0, 1024, 1024, 1024, 1024, 1024);
623 SetLastError(0xdeadbeef);
624 urlComponents.dwStructSize = 0;
625 ret = InternetCrackUrlA(TEST_URL, 0, 0, &urlComponents);
626 GLE = GetLastError();
627 ok(ret == FALSE, "Expected InternetCrackUrl to fail\n");
628 ok(GLE != 0xdeadbeef && GLE != ERROR_SUCCESS, "Expected GLE to represent a failure\n");
629
630 /* Invalid Call: size of dwStructSize must be one of the "standard" sizes
631 * of the URL_COMPONENTS structure (Windows only enforces this on the
632 * InternetCrackUrlA version of the call) */
633 copy_compsA(&urlSrc, &urlComponents, 0, 1024, 1024, 1024, 1024, 1024);
634 SetLastError(0xdeadbeef);
635 urlComponents.dwStructSize = sizeof(urlComponents) + 1;
636 ret = InternetCrackUrlA(TEST_URL, 0, 0, &urlComponents);
637 GLE = GetLastError();
638 ok(ret == FALSE, "Expected InternetCrackUrl to fail\n");
639 ok(GLE != 0xdeadbeef && GLE != ERROR_SUCCESS, "Expected GLE to represent a failure\n");
640
641 SetLastError(0xdeadbeef);
642 memset(&urlComponents, 0, sizeof(urlComponents));
643 urlComponents.dwStructSize = sizeof(urlComponents);
644 ret = InternetCrackUrlA("file.txt", 0, 0, &urlComponents);
645 GLE = GetLastError();
646 ok(ret == FALSE, "Expected InternetCrackUrl to fail\n");
647 ok(GLE == ERROR_INTERNET_UNRECOGNIZED_SCHEME, "Expected GLE to represent a failure\n");
648
649 SetLastError(0xdeadbeef);
650 memset(&urlComponents, 0, sizeof(urlComponents));
651 urlComponents.dwStructSize = sizeof(urlComponents);
652 ret = InternetCrackUrlA("www.winehq.org", 0, 0, &urlComponents);
653 GLE = GetLastError();
654 ok(ret == FALSE, "Expected InternetCrackUrl to fail\n");
655 ok(GLE == ERROR_INTERNET_UNRECOGNIZED_SCHEME, "Expected GLE to represent a failure\n");
656}
657
658static void InternetCrackUrlW_test(void)
659{
660 WCHAR url[] = {
661 'h','t','t','p',':','/','/','1','9','2','.','1','6','8','.','0','.','2','2','/',
662 'C','F','I','D','E','/','m','a','i','n','.','c','f','m','?','C','F','S','V','R',
663 '=','I','D','E','&','A','C','T','I','O','N','=','I','D','E','_','D','E','F','A',
664 'U','L','T', 0 };
665 static const WCHAR url2[] = { '.','.','/','R','i','t','z','.','x','m','l',0 };
666 static const WCHAR url3[] = { 'h','t','t','p',':','/','/','x','.','o','r','g',0 };
667 URL_COMPONENTSW comp;
668 WCHAR scheme[20], host[20], user[20], pwd[20], urlpart[50], extra[50];
669 DWORD error;
670 BOOL r;
671
672 urlpart[0]=0;
673 scheme[0]=0;
674 extra[0]=0;
675 host[0]=0;
676 user[0]=0;
677 pwd[0]=0;
678 memset(&comp, 0, sizeof comp);
679 comp.dwStructSize = sizeof(comp);
680 comp.lpszScheme = scheme;
682 comp.lpszHostName = host;
684 comp.lpszUserName = user;
686 comp.lpszPassword = pwd;
688 comp.lpszUrlPath = urlpart;
689 comp.dwUrlPathLength = ARRAY_SIZE(urlpart);
690 comp.lpszExtraInfo = extra;
692
693 SetLastError(0xdeadbeef);
694 r = InternetCrackUrlW(NULL, 0, 0, &comp );
697 {
698 win_skip("InternetCrackUrlW is not implemented\n");
699 return;
700 }
701 ok( !r, "InternetCrackUrlW succeeded unexpectedly\n");
704 "expected ERROR_INVALID_PARAMETER got %u\n", error);
705
707 {
708 /* Crashes on IE5 */
709 SetLastError(0xdeadbeef);
710 r = InternetCrackUrlW(url, 0, 0, NULL );
712 ok( !r, "InternetCrackUrlW succeeded unexpectedly\n");
713 ok( error == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", error);
714 }
715
716 r = InternetCrackUrlW(url, 0, 0, &comp );
717 ok( r, "failed to crack url\n");
718 ok( comp.dwSchemeLength == 4, "scheme length wrong\n");
719 ok( comp.dwHostNameLength == 12, "host length wrong\n");
720 ok( comp.dwUserNameLength == 0, "user length wrong\n");
721 ok( comp.dwPasswordLength == 0, "password length wrong\n");
722 ok( comp.dwUrlPathLength == 15, "url length wrong\n");
723 ok( comp.dwExtraInfoLength == 29, "extra length wrong\n");
724
725 urlpart[0]=0;
726 host[0]=0;
727 memset(&comp, 0, sizeof comp);
728 comp.dwStructSize = sizeof comp;
729 comp.lpszHostName = host;
731 comp.lpszUrlPath = urlpart;
732 comp.dwUrlPathLength = ARRAY_SIZE(urlpart);
733
734 r = InternetCrackUrlW(url, 0, 0, &comp );
735 ok( r, "failed to crack url\n");
736 ok( comp.dwSchemeLength == 0, "scheme length wrong\n");
737 ok( comp.dwHostNameLength == 12, "host length wrong\n");
738 ok( comp.dwUserNameLength == 0, "user length wrong\n");
739 ok( comp.dwPasswordLength == 0, "password length wrong\n");
740 ok( comp.dwUrlPathLength == 44, "url length wrong\n");
741 ok( comp.dwExtraInfoLength == 0, "extra length wrong\n");
742
743 urlpart[0]=0;
744 host[0]=0;
745 memset(&comp, 0, sizeof comp);
746 comp.dwStructSize = sizeof comp;
747 comp.lpszHostName = host;
749 comp.lpszUrlPath = urlpart;
750 comp.dwUrlPathLength = ARRAY_SIZE(urlpart);
751 comp.lpszExtraInfo = NULL;
753
754 r = InternetCrackUrlW(url, 0, 0, &comp );
755 ok( r, "failed to crack url\n");
756 ok( comp.dwSchemeLength == 0, "scheme length wrong\n");
757 ok( comp.dwHostNameLength == 12, "host length wrong\n");
758 ok( comp.dwUserNameLength == 0, "user length wrong\n");
759 ok( comp.dwPasswordLength == 0, "password length wrong\n");
760 ok( comp.dwUrlPathLength == 15, "url length wrong\n");
761 ok( comp.dwExtraInfoLength == 29, "extra length wrong\n");
762
763 urlpart[0]=0;
764 scheme[0]=0;
765 extra[0]=0;
766 host[0]=0;
767 user[0]=0;
768 pwd[0]=0;
769 memset(&comp, 0, sizeof(comp));
770 comp.dwStructSize = sizeof(comp);
771 comp.lpszScheme = scheme;
773 comp.lpszHostName = host;
775 comp.lpszUserName = user;
777 comp.lpszPassword = pwd;
779 comp.lpszUrlPath = urlpart;
780 comp.dwUrlPathLength = ARRAY_SIZE(urlpart);
781 comp.lpszExtraInfo = extra;
783
784 r = InternetCrackUrlW(url2, 0, 0, &comp);
785 ok(!r, "InternetCrackUrl should have failed\n");
787 "InternetCrackUrl should have failed with error ERROR_INTERNET_UNRECOGNIZED_SCHEME instead of error %d\n",
788 GetLastError());
789
790 /* Test to see whether cracking a URL without a filename initializes urlpart */
791 urlpart[0]=0xba;
792 scheme[0]=0;
793 extra[0]=0;
794 host[0]=0;
795 user[0]=0;
796 pwd[0]=0;
797 memset(&comp, 0, sizeof comp);
798 comp.dwStructSize = sizeof comp;
799 comp.lpszScheme = scheme;
801 comp.lpszHostName = host;
803 comp.lpszUserName = user;
805 comp.lpszPassword = pwd;
807 comp.lpszUrlPath = urlpart;
808 comp.dwUrlPathLength = ARRAY_SIZE(urlpart);
809 comp.lpszExtraInfo = extra;
811 r = InternetCrackUrlW(url3, 0, 0, &comp );
812 ok( r, "InternetCrackUrlW failed unexpectedly\n");
813 ok( host[0] == 'x', "host should be x.org\n");
814 ok( urlpart[0] == 0, "urlpart should be empty\n");
815
816 urlpart[0] = 0;
817 host[0] = 0;
818 memset(&comp, 0, sizeof(comp));
819 comp.dwStructSize = sizeof(comp);
820 comp.lpszHostName = host;
822 comp.lpszUrlPath = urlpart;
823 comp.dwUrlPathLength = ARRAY_SIZE(urlpart);
824 r = InternetCrackUrlW(url3, 0, ICU_DECODE, &comp);
825 ok(r, "InternetCrackUrlW failed unexpectedly\n");
826 ok(!strcmp_wa(host, "x.org"), "host is %s, should be x.org\n", wine_dbgstr_w(host));
827 todo_wine ok(urlpart[0] == 0, "urlpart should be empty\n");
828}
829
830static void fill_url_components(URL_COMPONENTSA *lpUrlComponents)
831{
832 static CHAR http[] = "http",
833 winehq[] = "www.winehq.org",
834 username[] = "username",
835 password[] = "password",
836 site_about[] = "/site/about",
837 empty[] = "";
838
839 lpUrlComponents->dwStructSize = sizeof(URL_COMPONENTSA);
840 lpUrlComponents->lpszScheme = http;
841 lpUrlComponents->dwSchemeLength = strlen(lpUrlComponents->lpszScheme);
842 lpUrlComponents->nScheme = INTERNET_SCHEME_HTTP;
843 lpUrlComponents->lpszHostName = winehq;
844 lpUrlComponents->dwHostNameLength = strlen(lpUrlComponents->lpszHostName);
845 lpUrlComponents->nPort = 80;
846 lpUrlComponents->lpszUserName = username;
847 lpUrlComponents->dwUserNameLength = strlen(lpUrlComponents->lpszUserName);
848 lpUrlComponents->lpszPassword = password;
849 lpUrlComponents->dwPasswordLength = strlen(lpUrlComponents->lpszPassword);
850 lpUrlComponents->lpszUrlPath = site_about;
851 lpUrlComponents->dwUrlPathLength = strlen(lpUrlComponents->lpszUrlPath);
852 lpUrlComponents->lpszExtraInfo = empty;
853 lpUrlComponents->dwExtraInfoLength = strlen(lpUrlComponents->lpszExtraInfo);
854}
855
856static void InternetCreateUrlA_test(void)
857{
858 URL_COMPONENTSA urlComp;
859 LPSTR szUrl;
860 DWORD len = -1;
861 BOOL ret;
862 static CHAR empty[] = "",
863 nhttp[] = "nhttp",
864 http[] = "http",
865 https[] = "https",
866 winehq[] = "www.winehq.org",
867 localhost[] = "localhost",
868 username[] = "username",
869 password[] = "password",
870 root[] = "/",
871 site_about[] = "/site/about",
872 extra_info[] = "?test=123",
873 about[] = "about",
874 blank[] = "blank",
875 host[] = "host";
876
877 /* test NULL lpUrlComponents */
878 SetLastError(0xdeadbeef);
880 ok(!ret, "Expected failure\n");
882 "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
883 ok(len == -1, "Expected len -1, got %d\n", len);
884
885 /* test zero'ed lpUrlComponents */
886 ZeroMemory(&urlComp, sizeof(urlComp));
887 SetLastError(0xdeadbeef);
888 ret = InternetCreateUrlA(&urlComp, 0, NULL, &len);
889 ok(!ret, "Expected failure\n");
891 "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
892 ok(len == -1, "Expected len -1, got %d\n", len);
893
894 /* test valid lpUrlComponents, NULL lpdwUrlLength */
895 fill_url_components(&urlComp);
896 SetLastError(0xdeadbeef);
897 ret = InternetCreateUrlA(&urlComp, 0, NULL, NULL);
898 ok(!ret, "Expected failure\n");
900 "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
901
902 /* test valid lpUrlComponents, empty szUrl
903 * lpdwUrlLength is size of buffer required on exit, including
904 * the terminating null when GLE == ERROR_INSUFFICIENT_BUFFER
905 */
906 SetLastError(0xdeadbeef);
907 ret = InternetCreateUrlA(&urlComp, 0, NULL, &len);
908 ok(!ret, "Expected failure\n");
910 "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
911 ok(len == 51, "Expected len 51, got %d\n", len);
912
913 /* test correct size, NULL szUrl */
914 fill_url_components(&urlComp);
915 SetLastError(0xdeadbeef);
916 ret = InternetCreateUrlA(&urlComp, 0, NULL, &len);
917 ok(!ret, "Expected failure\n");
919 "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
920 ok(len == 51, "Expected len 51, got %d\n", len);
921
922 /* test valid lpUrlComponents, alloc-ed szUrl, small size */
923 SetLastError(0xdeadbeef);
924 szUrl = HeapAlloc(GetProcessHeap(), 0, len);
925 len -= 2;
926 ret = InternetCreateUrlA(&urlComp, 0, szUrl, &len);
927 ok(!ret, "Expected failure\n");
929 "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
930 ok(len == 51, "Expected len 51, got %d\n", len);
931
932 /* alloc-ed szUrl, NULL lpszScheme
933 * shows that it uses nScheme instead
934 */
935 urlComp.lpszScheme = NULL;
936 ret = InternetCreateUrlA(&urlComp, 0, szUrl, &len);
937 ok(ret, "Expected success\n");
938 ok(len == 50, "Expected len 50, got %d\n", len);
939 ok(!strcmp(szUrl, CREATE_URL1), "Expected %s, got %s\n", CREATE_URL1, szUrl);
940
941 /* alloc-ed szUrl, invalid nScheme
942 * any nScheme out of range seems ignored
943 */
944 fill_url_components(&urlComp);
945 urlComp.nScheme = -3;
946 len++;
947 ret = InternetCreateUrlA(&urlComp, 0, szUrl, &len);
948 ok(ret, "Expected success\n");
949 ok(len == 50, "Expected len 50, got %d\n", len);
950
951 /* test valid lpUrlComponents, alloc-ed szUrl */
952 fill_url_components(&urlComp);
953 len = 51;
954 ret = InternetCreateUrlA(&urlComp, 0, szUrl, &len);
955 ok(ret, "Expected success\n");
956 ok(len == 50, "Expected len 50, got %d\n", len);
957 ok(strstr(szUrl, "80") == NULL, "Didn't expect to find 80 in szUrl\n");
958 ok(!strcmp(szUrl, CREATE_URL1), "Expected %s, got %s\n", CREATE_URL1, szUrl);
959
960 /* valid username, NULL password */
961 fill_url_components(&urlComp);
962 urlComp.lpszPassword = NULL;
963 len = 42;
964 ret = InternetCreateUrlA(&urlComp, 0, szUrl, &len);
965 ok(ret, "Expected success\n");
966 ok(len == 41, "Expected len 41, got %d\n", len);
967 ok(!strcmp(szUrl, CREATE_URL2), "Expected %s, got %s\n", CREATE_URL2, szUrl);
968
969 /* valid username, empty password */
970 fill_url_components(&urlComp);
971 urlComp.lpszPassword = empty;
972 len = 51;
973 ret = InternetCreateUrlA(&urlComp, 0, szUrl, &len);
974 ok(ret, "Expected success\n");
975 ok(len == 50, "Expected len 50, got %d\n", len);
976 ok(!strcmp(szUrl, CREATE_URL3), "Expected %s, got %s\n", CREATE_URL3, szUrl);
977
978 /* valid password, NULL username
979 * if password is provided, username has to exist
980 */
981 fill_url_components(&urlComp);
982 SetLastError(0xdeadbeef);
983 urlComp.lpszUserName = NULL;
984 len = 42;
985 ret = InternetCreateUrlA(&urlComp, 0, szUrl, &len);
986 ok(!ret, "Expected failure\n");
988 "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
989 ok(len == 42, "Expected len 42, got %d\n", len);
990 ok(!strcmp(szUrl, CREATE_URL3), "Expected %s, got %s\n", CREATE_URL3, szUrl);
991
992 /* valid password, empty username
993 * if password is provided, username has to exist
994 */
995 fill_url_components(&urlComp);
996 urlComp.lpszUserName = empty;
997 len = 51;
998 ret = InternetCreateUrlA(&urlComp, 0, szUrl, &len);
999 ok(ret, "Expected success\n");
1000 ok(len == 50, "Expected len 50, got %d\n", len);
1001 ok(!strcmp(szUrl, CREATE_URL5), "Expected %s, got %s\n", CREATE_URL5, szUrl);
1002
1003 /* NULL username, NULL password */
1004 fill_url_components(&urlComp);
1005 urlComp.lpszUserName = NULL;
1006 urlComp.lpszPassword = NULL;
1007 len = 42;
1008 ret = InternetCreateUrlA(&urlComp, 0, szUrl, &len);
1009 ok(ret, "Expected success\n");
1010 ok(len == 32, "Expected len 32, got %d\n", len);
1011 ok(!strcmp(szUrl, CREATE_URL4), "Expected %s, got %s\n", CREATE_URL4, szUrl);
1012
1013 /* empty username, empty password */
1014 fill_url_components(&urlComp);
1015 urlComp.lpszUserName = empty;
1016 urlComp.lpszPassword = empty;
1017 len = 51;
1018 ret = InternetCreateUrlA(&urlComp, 0, szUrl, &len);
1019 ok(ret, "Expected success\n");
1020 ok(len == 50, "Expected len 50, got %d\n", len);
1021 ok(!strcmp(szUrl, CREATE_URL5), "Expected %s, got %s\n", CREATE_URL5, szUrl);
1022
1023 /* shows that nScheme is ignored, as the appearance of the port number
1024 * depends on lpszScheme and the string copied depends on lpszScheme.
1025 */
1026 fill_url_components(&urlComp);
1027 HeapFree(GetProcessHeap(), 0, szUrl);
1028 urlComp.lpszScheme = nhttp;
1029 urlComp.dwSchemeLength = strlen(urlComp.lpszScheme);
1030 len = strlen(CREATE_URL6) + 1;
1031 szUrl = HeapAlloc(GetProcessHeap(), 0, len);
1032 ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len);
1033 ok(ret, "Expected success\n");
1034 ok(len == strlen(CREATE_URL6), "Expected len %d, got %d\n", lstrlenA(CREATE_URL6) + 1, len);
1035 ok(!strcmp(szUrl, CREATE_URL6), "Expected %s, got %s\n", CREATE_URL6, szUrl);
1036
1037 /* if lpszScheme != "http" or nPort != 80, display nPort */
1038 HeapFree(GetProcessHeap(), 0, szUrl);
1039 urlComp.lpszScheme = http;
1040 urlComp.dwSchemeLength = strlen(urlComp.lpszScheme);
1041 urlComp.nPort = 42;
1042 szUrl = HeapAlloc(GetProcessHeap(), 0, ++len);
1043 ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len);
1044 ok(ret, "Expected success\n");
1045 ok(len == 53, "Expected len 53, got %d\n", len);
1046 ok(strstr(szUrl, "42") != NULL, "Expected to find 42 in szUrl\n");
1047 ok(!strcmp(szUrl, CREATE_URL7), "Expected %s, got %s\n", CREATE_URL7, szUrl);
1048
1049 HeapFree(GetProcessHeap(), 0, szUrl);
1050
1051 memset(&urlComp, 0, sizeof(urlComp));
1052 urlComp.dwStructSize = sizeof(urlComp);
1053 urlComp.lpszScheme = http;
1054 urlComp.dwSchemeLength = 0;
1055 urlComp.nScheme = INTERNET_SCHEME_HTTP;
1056 urlComp.lpszHostName = winehq;
1057 urlComp.dwHostNameLength = 0;
1058 urlComp.nPort = 80;
1059 urlComp.lpszUserName = username;
1060 urlComp.dwUserNameLength = 0;
1061 urlComp.lpszPassword = password;
1062 urlComp.dwPasswordLength = 0;
1063 urlComp.lpszUrlPath = site_about;
1064 urlComp.dwUrlPathLength = 0;
1065 urlComp.lpszExtraInfo = empty;
1066 urlComp.dwExtraInfoLength = 0;
1068 szUrl = HeapAlloc(GetProcessHeap(), 0, ++len);
1069 ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len);
1070 ok(ret, "Expected success\n");
1071 ok(len == strlen(CREATE_URL1), "Expected len %d, got %d\n", lstrlenA(CREATE_URL1), len);
1072 ok(!strcmp(szUrl, CREATE_URL1), "Expected %s, got %s\n", CREATE_URL1, szUrl);
1073
1074 HeapFree(GetProcessHeap(), 0, szUrl);
1075
1076 memset(&urlComp, 0, sizeof(urlComp));
1077 urlComp.dwStructSize = sizeof(urlComp);
1078 urlComp.lpszScheme = https;
1079 urlComp.dwSchemeLength = 0;
1080 urlComp.nScheme = INTERNET_SCHEME_HTTP;
1081 urlComp.lpszHostName = winehq;
1082 urlComp.dwHostNameLength = 0;
1083 urlComp.nPort = 443;
1084 urlComp.lpszUserName = username;
1085 urlComp.dwUserNameLength = 0;
1086 urlComp.lpszPassword = password;
1087 urlComp.dwPasswordLength = 0;
1088 urlComp.lpszUrlPath = site_about;
1089 urlComp.dwUrlPathLength = 0;
1090 urlComp.lpszExtraInfo = empty;
1091 urlComp.dwExtraInfoLength = 0;
1093 szUrl = HeapAlloc(GetProcessHeap(), 0, ++len);
1094 ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len);
1095 ok(ret, "Expected success\n");
1096 ok(len == strlen(CREATE_URL8), "Expected len %d, got %d\n", lstrlenA(CREATE_URL8), len);
1097 ok(!strcmp(szUrl, CREATE_URL8), "Expected %s, got %s\n", CREATE_URL8, szUrl);
1098
1099 HeapFree(GetProcessHeap(), 0, szUrl);
1100
1101 memset(&urlComp, 0, sizeof(urlComp));
1102 urlComp.dwStructSize = sizeof(urlComp);
1103 urlComp.lpszScheme = about;
1104 urlComp.dwSchemeLength = 5;
1105 urlComp.lpszUrlPath = blank;
1106 urlComp.dwUrlPathLength = 5;
1108 len++; /* work around bug in native wininet */
1109 szUrl = HeapAlloc(GetProcessHeap(), 0, ++len);
1110 ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len);
1111 ok(ret, "Expected success\n");
1112 ok(len == strlen(CREATE_URL9), "Expected len %d, got %d\n", lstrlenA(CREATE_URL9), len);
1113 ok(!strcmp(szUrl, CREATE_URL9), "Expected %s, got %s\n", CREATE_URL9, szUrl);
1114
1115 HeapFree(GetProcessHeap(), 0, szUrl);
1116
1117 memset(&urlComp, 0, sizeof(urlComp));
1118 urlComp.dwStructSize = sizeof(urlComp);
1119 urlComp.lpszScheme = about;
1120 urlComp.lpszHostName = host;
1121 urlComp.lpszUrlPath = blank;
1123 len++; /* work around bug in native wininet */
1124 szUrl = HeapAlloc(GetProcessHeap(), 0, ++len);
1125 ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len);
1126 ok(ret, "Expected success\n");
1127 ok(len == strlen(CREATE_URL10), "Expected len %d, got %d\n", lstrlenA(CREATE_URL10), len);
1128 ok(!strcmp(szUrl, CREATE_URL10), "Expected %s, got %s\n", CREATE_URL10, szUrl);
1129
1130 HeapFree(GetProcessHeap(), 0, szUrl);
1131
1132 memset(&urlComp, 0, sizeof(urlComp));
1133 urlComp.dwStructSize = sizeof(urlComp);
1134 urlComp.nPort = 8080;
1135 urlComp.lpszScheme = about;
1137 szUrl = HeapAlloc(GetProcessHeap(), 0, ++len);
1138 ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len);
1139 ok(ret, "Expected success\n");
1140 ok(len == strlen(CREATE_URL11), "Expected len %d, got %d\n", lstrlenA(CREATE_URL11), len);
1141 ok(!strcmp(szUrl, CREATE_URL11), "Expected %s, got %s\n", CREATE_URL11, szUrl);
1142
1143 HeapFree(GetProcessHeap(), 0, szUrl);
1144
1145 memset(&urlComp, 0, sizeof(urlComp));
1146 urlComp.dwStructSize = sizeof(urlComp);
1147 urlComp.lpszScheme = http;
1148 urlComp.dwSchemeLength = 0;
1149 urlComp.nScheme = INTERNET_SCHEME_HTTP;
1150 urlComp.lpszHostName = winehq;
1151 urlComp.dwHostNameLength = 0;
1152 urlComp.nPort = 65535;
1154 szUrl = HeapAlloc(GetProcessHeap(), 0, ++len);
1155 ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len);
1156 ok(ret, "Expected success\n");
1157 ok(len == strlen(CREATE_URL12), "Expected len %d, got %d\n", lstrlenA(CREATE_URL12), len);
1158 ok(!strcmp(szUrl, CREATE_URL12), "Expected %s, got %s\n", CREATE_URL12, szUrl);
1159
1160 HeapFree(GetProcessHeap(), 0, szUrl);
1161
1162 memset(&urlComp, 0, sizeof(urlComp));
1163 urlComp.dwStructSize = sizeof(urlComp);
1164 urlComp.lpszScheme = http;
1165 urlComp.dwSchemeLength = strlen(urlComp.lpszScheme);
1166 urlComp.lpszHostName = localhost;
1167 urlComp.dwHostNameLength = strlen(urlComp.lpszHostName);
1168 urlComp.nPort = 80;
1169 urlComp.lpszUrlPath = root;
1170 urlComp.dwUrlPathLength = strlen(urlComp.lpszUrlPath);
1171 urlComp.lpszExtraInfo = extra_info;
1172 urlComp.dwExtraInfoLength = strlen(urlComp.lpszExtraInfo);
1173 len = 256;
1174 szUrl = HeapAlloc(GetProcessHeap(), 0, len);
1175 InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len);
1176 ok(ret, "Expected success\n");
1177 ok(len == strlen(CREATE_URL13), "Got len %u\n", len);
1178 ok(!strcmp(szUrl, CREATE_URL13), "Expected \"%s\", got \"%s\"\n", CREATE_URL13, szUrl);
1179
1180 HeapFree(GetProcessHeap(), 0, szUrl);
1181}
1182
1184{
1185 char src[] = "http://www.winehq.org/%27/ /./>/#> ";
1186 char dst[64];
1187 DWORD dstlen;
1188
1189 dstlen = sizeof(dst);
1191 ok(strcmp(dst, "http://www.winehq.org/%27/%20/%3E/#>") == 0, "Got \"%s\"\n", dst);
1192
1193 /* despite what MSDN says, ICU_BROWSER_MODE seems to be ignored */
1194 dstlen = sizeof(dst);
1196 ok(strcmp(dst, "http://www.winehq.org/%27/%20/%3E/#>") == 0, "Got \"%s\"\n", dst);
1197
1198 /* ICU_ESCAPE is supposed to be ignored */
1199 dstlen = sizeof(dst);
1201 ok(strcmp(dst, "http://www.winehq.org/%27/%20/%3E/#>") == 0, "Got \"%s\"\n", dst);
1202
1203 dstlen = sizeof(dst);
1205 ok(strcmp(dst, "http://www.winehq.org/'/%20/%3E/#>") == 0, "Got \"%s\"\n", dst);
1206
1207 dstlen = sizeof(dst);
1209 ok(strcmp(dst, "http://www.winehq.org/%2527/%20/%3E/#>") == 0, "Got \"%s\"\n", dst);
1210
1211 dstlen = sizeof(dst);
1213 ok(strcmp(dst, "http://www.winehq.org/%27/%20/>/#>") == 0, "Got \"%s\"\n", dst);
1214
1215 dstlen = sizeof(dst);
1217 ok(strcmp(dst, "http://www.winehq.org/%27/ />/#>") == 0, "Got \"%s\"\n", dst);
1218
1219 dstlen = sizeof(dst);
1221 ok(strcmp(dst, "http://www.winehq.org/%27/%20/./%3E/#>") == 0, "Got \"%s\"\n", dst);
1222}
1223
1225{
1226 int i;
1227
1228 if(!GetProcAddress(GetModuleHandleA("wininet.dll"), "InternetGetCookieExW")) {
1229 win_skip("Too old IE (older than 6.0)\n");
1230 return;
1231 }
1232
1233 for(i = 0; i < ARRAY_SIZE(crack_url_tests); i++)
1235
1236 test_long_url();
1237
1242}
#define broken(x)
Definition: _sntprintf.h:21
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
#define ok(value,...)
Definition: atltest.h:57
#define START_TEST(x)
Definition: atltest.h:75
void pwd(int argc, const char *argv[])
Definition: cmds.c:1401
void user(int argc, const char *argv[])
Definition: cmds.c:1350
#define ARRAY_SIZE(A)
Definition: main.h:33
struct _root root
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
#define GetProcessHeap()
Definition: compat.h:736
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:102
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:109
#define SetLastError(x)
Definition: compat.h:752
#define GetProcAddress(x, y)
Definition: compat.h:753
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
#define MultiByteToWideChar
Definition: compat.h:110
#define lstrlenW
Definition: compat.h:750
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4242
BOOL WINAPI InternetCanonicalizeUrlA(LPCSTR lpszUrl, LPSTR lpszBuffer, LPDWORD lpdwBufferLength, DWORD dwFlags)
Definition: internet.c:1978
BOOL WINAPI InternetCreateUrlA(LPURL_COMPONENTSA lpUrlComponents, DWORD dwFlags, LPSTR lpszUrl, LPDWORD lpdwUrlLength)
Definition: internet.c:4361
BOOL WINAPI InternetCrackUrlW(const WCHAR *lpszUrl, DWORD dwUrlLength, DWORD dwFlags, URL_COMPONENTSW *lpUC)
Definition: internet.c:1625
BOOL WINAPI InternetCrackUrlA(const char *url, DWORD url_length, DWORD flags, URL_COMPONENTSA *ret_comp)
Definition: internet.c:1506
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLenum src
Definition: glext.h:6340
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLenum GLenum dst
Definition: glext.h:6340
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
@ extra
Definition: id3.c:95
#define b
Definition: ke_i.h:79
#define wine_dbgstr_w
Definition: kernel32.h:34
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
#define error(str)
Definition: mkdosfs.c:1605
static DWORD GLE
Definition: registry.c:38
static const WCHAR url[]
Definition: encode.c:1432
static const BYTE localhost[]
Definition: encode.c:1442
#define todo_wine
Definition: custom.c:79
static DWORD dstlen
Definition: directory.c:51
const char * path
Definition: url.c:450
static const WCHAR url2[]
Definition: misc.c:302
static WCHAR empty[]
Definition: url.c:28
static WCHAR http[]
Definition: url.c:30
static WCHAR winehq[]
Definition: url.c:31
static void fill_url_components(URL_COMPONENTS *uc)
Definition: url.c:111
static WCHAR about[]
Definition: url.c:34
static WCHAR password[]
Definition: url.c:33
static WCHAR username[]
Definition: url.c:32
static const WCHAR url3[]
Definition: url.c:45
#define CREATE_URL9
Definition: url.c:46
#define CREATE_URL2
Definition: url.c:39
static void zero_compsA(URL_COMPONENTSA *dst, DWORD scheLen, DWORD hostLen, DWORD userLen, DWORD passLen, DWORD pathLen, DWORD extrLen)
Definition: url.c:72
#define CREATE_URL13
Definition: url.c:50
static int strcmp_wa(const WCHAR *str1, const char *str2)
Definition: url.c:191
static void copy_compsA(URL_COMPONENTSA *src, URL_COMPONENTSA *dst, DWORD scheLen, DWORD hostLen, DWORD userLen, DWORD passLen, DWORD pathLen, DWORD extrLen)
Definition: url.c:52
static void InternetCrackUrlW_test(void)
Definition: url.c:658
static const crack_url_test_t crack_url_tests[]
Definition: url.c:117
#define CREATE_URL8
Definition: url.c:45
#define CREATE_URL7
Definition: url.c:44
static void test_crack_url(const crack_url_test_t *test)
Definition: url.c:199
#define CREATE_URL11
Definition: url.c:48
static void InternetCreateUrlA_test(void)
Definition: url.c:856
#define CREATE_URL1
Definition: url.c:38
static void InternetCrackUrl_test(void)
Definition: url.c:518
#define CREATE_URL3
Definition: url.c:40
#define CREATE_URL4
Definition: url.c:41
#define CREATE_URL10
Definition: url.c:47
static WCHAR * a2w(const char *str)
Definition: url.c:180
#define CREATE_URL6
Definition: url.c:43
#define CREATE_URL5
Definition: url.c:42
#define TEST_URL
Definition: url.c:35
#define CREATE_URL12
Definition: url.c:49
static void test_long_url(void)
Definition: url.c:481
#define TEST_URL3
Definition: url.c:36
static void InternetCanonicalizeUrl_test(void)
Definition: url.c:1183
#define test
Definition: rosglue.h:37
const WCHAR * str
DWORD scheme
#define win_skip
Definition: test.h:163
#define memset(x, y, z)
Definition: compat.h:39
INTERNET_SCHEME nScheme
Definition: wininet.h:196
LPSTR lpszScheme
Definition: wininet.h:194
DWORD dwSchemeLength
Definition: wininet.h:195
DWORD dwExtraInfoLength
Definition: wininet.h:207
DWORD dwUrlPathLength
Definition: wininet.h:205
DWORD dwStructSize
Definition: wininet.h:193
DWORD dwUserNameLength
Definition: wininet.h:201
LPSTR lpszExtraInfo
Definition: wininet.h:206
DWORD dwPasswordLength
Definition: wininet.h:203
LPSTR lpszPassword
Definition: wininet.h:202
LPSTR lpszUserName
Definition: wininet.h:200
DWORD dwHostNameLength
Definition: wininet.h:198
LPSTR lpszHostName
Definition: wininet.h:197
LPSTR lpszUrlPath
Definition: wininet.h:204
INTERNET_PORT nPort
Definition: wininet.h:199
DWORD dwStructSize
Definition: wininet.h:211
DWORD dwUrlPathLength
Definition: wininet.h:223
DWORD dwExtraInfoLength
Definition: wininet.h:225
LPWSTR lpszPassword
Definition: wininet.h:220
LPWSTR lpszHostName
Definition: wininet.h:215
DWORD dwUserNameLength
Definition: wininet.h:219
DWORD dwHostNameLength
Definition: wininet.h:216
INTERNET_SCHEME nScheme
Definition: wininet.h:214
LPWSTR lpszScheme
Definition: wininet.h:212
LPWSTR lpszUserName
Definition: wininet.h:218
LPWSTR lpszUrlPath
Definition: wininet.h:222
LPWSTR lpszExtraInfo
Definition: wininet.h:224
DWORD dwPasswordLength
Definition: wininet.h:221
INTERNET_PORT nPort
Definition: wininet.h:217
DWORD dwSchemeLength
Definition: wininet.h:213
int pass_off
Definition: url.c:103
const char * exp_hostname
Definition: url.c:110
int scheme_len
Definition: url.c:95
INTERNET_PORT port
Definition: url.c:100
int scheme_off
Definition: url.c:94
const char * exp_username
Definition: url.c:111
int pass_len
Definition: url.c:104
int host_skip_broken
Definition: url.c:99
INTERNET_SCHEME scheme
Definition: url.c:96
const char * url
Definition: url.c:93
const char * exp_urlpath
Definition: url.c:113
int host_len
Definition: url.c:98
int host_off
Definition: url.c:97
int user_len
Definition: url.c:102
const char * exp_extrainfo
Definition: url.c:114
int path_len
Definition: url.c:106
int extra_off
Definition: url.c:107
int path_off
Definition: url.c:105
const char * exp_scheme
Definition: url.c:109
int user_off
Definition: url.c:101
const char * exp_password
Definition: url.c:112
int extra_len
Definition: url.c:108
int ret
char * host
Definition: whois.c:55
#define ZeroMemory
Definition: winbase.h:1712
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
WORD INTERNET_PORT
Definition: winhttp.h:38
#define ICU_NO_META
Definition: winhttp.h:292
#define ICU_ENCODE_SPACES_ONLY
Definition: winhttp.h:293
#define ICU_DECODE
Definition: winhttp.h:291
#define INTERNET_SCHEME_HTTP
Definition: winhttp.h:42
#define ICU_BROWSER_MODE
Definition: winhttp.h:294
#define ICU_NO_ENCODE
Definition: winhttp.h:290
#define ICU_ESCAPE
Definition: winhttp.h:48
#define ICU_ENCODE_PERCENT
Definition: winhttp.h:295
INTERNET_SCHEME
Definition: wininet.h:135
@ INTERNET_SCHEME_FILE
Definition: wininet.h:143
@ INTERNET_SCHEME_RES
Definition: wininet.h:149
@ INTERNET_SCHEME_UNKNOWN
Definition: wininet.h:137
@ INTERNET_SCHEME_GOPHER
Definition: wininet.h:140
#define ERROR_INTERNET_UNRECOGNIZED_SCHEME
Definition: wininet.h:1995
static const WCHAR userName[]
Definition: wnet.c:2154
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180
char CHAR
Definition: xmlstorage.h:175