Module: wine Branch: refs/heads/master Commit: b0fcaf9d48fdc6fbc98fbaab5a8b833a7eae021e URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=b0fcaf9d48fdc6fbc98fbaab... Author: Robert Shearman <rob(a)codeweavers.com> Date: Thu Mar 9 15:19:15 2006 +0000 wininet: Further InternetCreateFileW fixes. - Add the slash after the port number. - Only add the port number if the host name is present. --- dlls/wininet/internet.c | 49 ++++++++++++++++++++++++++------------------- dlls/wininet/tests/http.c | 19 ++++++++++++++++- 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index 5930ea5..e06c306 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -3783,20 +3783,23 @@ static BOOL calc_url_length(LPURL_COMPON if (lpUrlComponents->lpszHostName) { *lpdwUrlLength += URL_GET_COMP_LENGTH(lpUrlComponents, HostName); + + if (!url_uses_default_port(nScheme, lpUrlComponents->nPort)) + { + char szPort[MAX_WORD_DIGITS]; + + sprintf(szPort, "%d", lpUrlComponents->nPort); + *lpdwUrlLength += strlen(szPort); + *lpdwUrlLength += strlen(":"); + } + if (lpUrlComponents->lpszUrlPath && *lpUrlComponents->lpszUrlPath != '/') (*lpdwUrlLength)++; /* '/' */ } - if (!url_uses_default_port(nScheme, lpUrlComponents->nPort)) - { - char szPort[MAX_WORD_DIGITS]; - - sprintf(szPort, "%d", lpUrlComponents->nPort); - *lpdwUrlLength += strlen(szPort); - *lpdwUrlLength += strlen(":"); - } + if (lpUrlComponents->lpszUrlPath) + *lpdwUrlLength += URL_GET_COMP_LENGTH(lpUrlComponents, UrlPath); - *lpdwUrlLength += URL_GET_COMP_LENGTH(lpUrlComponents, UrlPath); return TRUE; } @@ -4016,6 +4019,18 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM memcpy(lpszUrl, lpUrlComponents->lpszHostName, dwLen * sizeof(WCHAR)); lpszUrl += dwLen; + if (!url_uses_default_port(nScheme, lpUrlComponents->nPort)) + { + WCHAR szPort[MAX_WORD_DIGITS]; + + sprintfW(szPort, percentD, lpUrlComponents->nPort); + *lpszUrl = ':'; + lpszUrl++; + dwLen = strlenW(szPort); + memcpy(lpszUrl, szPort, dwLen * sizeof(WCHAR)); + lpszUrl += dwLen; + } + /* add slash between hostname and path if necessary */ if (lpUrlComponents->lpszUrlPath && *lpUrlComponents->lpszUrlPath != '/') { @@ -4024,22 +4039,14 @@ BOOL WINAPI InternetCreateUrlW(LPURL_COM } } - if (!url_uses_default_port(nScheme, lpUrlComponents->nPort)) - { - WCHAR szPort[MAX_WORD_DIGITS]; - sprintfW(szPort, percentD, lpUrlComponents->nPort); - *lpszUrl = ':'; - lpszUrl++; - dwLen = strlenW(szPort); - memcpy(lpszUrl, szPort, dwLen * sizeof(WCHAR)); + if (lpUrlComponents->lpszUrlPath) + { + dwLen = URL_GET_COMP_LENGTH(lpUrlComponents, UrlPath); + memcpy(lpszUrl, lpUrlComponents->lpszUrlPath, dwLen * sizeof(WCHAR)); lpszUrl += dwLen; } - dwLen = URL_GET_COMP_LENGTH(lpUrlComponents, UrlPath); - memcpy(lpszUrl, lpUrlComponents->lpszUrlPath, dwLen * sizeof(WCHAR)); - lpszUrl += dwLen; - *lpszUrl = '\0'; return TRUE; diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c index a4b66eb..a202268 100644 --- a/dlls/wininet/tests/http.c +++ b/dlls/wininet/tests/http.c @@ -49,6 +49,7 @@ #define CREATE_URL8 "https://username:password(a)www.winehq.org/site/about" #define CREATE_URL9 "about:blank" #define CREATE_URL10 "about://host/blank" +#define CREATE_URL11 "about:" static HANDLE hCompleteEvent; @@ -1129,8 +1130,22 @@ static void InternetCreateUrlA_test(void szUrl = (char *)HeapAlloc(GetProcessHeap(), 0, ++len); ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len); ok(ret, "Expected success\n"); - ok(len == strlen(CREATE_URL10), "Expected len %d, got %ld\n", strlen(CREATE_URL9), len); - ok(!strcmp(szUrl, CREATE_URL10), "Expected %s, got %s\n", CREATE_URL9, szUrl); + ok(len == strlen(CREATE_URL10), "Expected len %d, got %ld\n", strlen(CREATE_URL10), len); + ok(!strcmp(szUrl, CREATE_URL10), "Expected %s, got %s\n", CREATE_URL10, szUrl); + + HeapFree(GetProcessHeap(), 0, szUrl); + + memset(&urlComp, 0, sizeof(urlComp)); + urlComp.dwStructSize = sizeof(URL_COMPONENTS); + urlComp.nPort = 8080; + urlComp.lpszScheme = "about"; + len = strlen(CREATE_URL11); + len++; /* work around bug in native wininet */ + szUrl = (char *)HeapAlloc(GetProcessHeap(), 0, ++len); + ret = InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len); + ok(ret, "Expected success\n"); + ok(len == strlen(CREATE_URL11), "Expected len %d, got %ld\n", strlen(CREATE_URL11), len); + ok(!strcmp(szUrl, CREATE_URL11), "Expected %s, got %s\n", CREATE_URL11, szUrl); HeapFree(GetProcessHeap(), 0, szUrl); }