Hans Leidekker : winhttp: Correctly handle relative redirect paths.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jun 16 10:13:13 CDT 2015
Module: wine
Branch: master
Commit: 9736644ed50f996091afe16243c3fa4a373498a0
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9736644ed50f996091afe16243c3fa4a373498a0
Author: Hans Leidekker <hans at codeweavers.com>
Date: Mon Jun 15 17:32:50 2015 +0200
winhttp: Correctly handle relative redirect paths.
---
dlls/winhttp/request.c | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c
index 2fee2c3..5aa90e4 100644
--- a/dlls/winhttp/request.c
+++ b/dlls/winhttp/request.c
@@ -2296,13 +2296,21 @@ static BOOL handle_redirect( request_t *request, DWORD status )
{
WCHAR *path, *p;
- len = strlenW( location ) + 1;
- if (location[0] != '/') len++;
- if (!(p = path = heap_alloc( len * sizeof(WCHAR) ))) goto end;
-
- if (location[0] != '/') *p++ = '/';
- strcpyW( p, location );
-
+ if (location[0] == '/')
+ {
+ len = strlenW( location );
+ if (!(path = heap_alloc( (len + 1) * sizeof(WCHAR) ))) goto end;
+ strcpyW( path, location );
+ }
+ else
+ {
+ if ((p = strrchrW( request->path, '/' ))) *p = 0;
+ len = strlenW( request->path ) + 1 + strlenW( location );
+ if (!(path = heap_alloc( (len + 1) * sizeof(WCHAR) ))) goto end;
+ strcpyW( path, request->path );
+ strcatW( path, slashW );
+ strcatW( path, location );
+ }
heap_free( request->path );
request->path = path;
More information about the wine-cvs
mailing list