Piotr Caban : wininet: Load persistent cookies from other paths in get_cookie function.
Alexandre Julliard
julliard at winehq.org
Wed Apr 24 13:45:58 CDT 2013
Module: wine
Branch: master
Commit: 103693e43b97d9133ab8d0f9b5cacc8f7c540b81
URL: http://source.winehq.org/git/wine.git/?a=commit;h=103693e43b97d9133ab8d0f9b5cacc8f7c540b81
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Apr 24 15:43:31 2013 +0200
wininet: Load persistent cookies from other paths in get_cookie function.
---
dlls/wininet/cookie.c | 29 +++++++++++++++++++++++++++--
1 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/dlls/wininet/cookie.c b/dlls/wininet/cookie.c
index 61aa53b..d20ad26 100644
--- a/dlls/wininet/cookie.c
+++ b/dlls/wininet/cookie.c
@@ -533,8 +533,11 @@ static void COOKIE_deleteDomain(cookie_domain *deadDomain)
DWORD get_cookie(const WCHAR *host, const WCHAR *path, WCHAR *cookie_data, DWORD *size)
{
+ static const WCHAR empty_path[] = { '/',0 };
+
unsigned cnt = 0, len, name_len, domain_count = 0, cookie_count = 0;
- WCHAR *ptr = cookie_data;
+ WCHAR *ptr, subpath[INTERNET_MAX_PATH_LENGTH];
+ const WCHAR *p;
cookie_domain *domain;
FILETIME tm;
@@ -542,8 +545,30 @@ DWORD get_cookie(const WCHAR *host, const WCHAR *path, WCHAR *cookie_data, DWORD
EnterCriticalSection(&cookie_cs);
- load_persistent_cookie(host, path);
+ len = strlenW(host);
+ p = host+len;
+ while(p>host && p[-1]!='.') p--;
+ while(p != host) {
+ p--;
+ while(p>host && p[-1]!='.') p--;
+ if(p == host) break;
+
+ load_persistent_cookie(p, empty_path);
+ }
+
+ len = strlenW(path);
+ assert(len+1 < INTERNET_MAX_PATH_LENGTH);
+ memcpy(subpath, path, (len+1)*sizeof(WCHAR));
+ ptr = subpath+len;
+ do {
+ *ptr = 0;
+ load_persistent_cookie(host, subpath);
+
+ ptr--;
+ while(ptr>subpath && ptr[-1]!='/') ptr--;
+ }while(ptr != subpath);
+ ptr = cookie_data;
LIST_FOR_EACH_ENTRY(domain, &domain_list, cookie_domain, entry) {
struct list *cursor, *cursor2;
More information about the wine-cvs
mailing list