Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
b7c68573
Commit
b7c68573
authored
Jul 22, 2010
by
Piotr Caban
Committed by
Alexandre Julliard
Jul 22, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
shlwapi: Improved UrlCanonicalizeW implementation.
parent
20017183
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
29 additions
and
25 deletions
+29
-25
url.c
dlls/shlwapi/tests/url.c
+4
-0
url.c
dlls/shlwapi/url.c
+25
-25
No files found.
dlls/shlwapi/tests/url.c
View file @
b7c68573
...
...
@@ -100,6 +100,8 @@ typedef struct _TEST_URL_CANONICALIZE {
static
const
TEST_URL_CANONICALIZE
TEST_CANONICALIZE
[]
=
{
{
"http://www.winehq.org/tests/../tests/../.."
,
0
,
S_OK
,
"http://www.winehq.org/"
,
TRUE
},
{
"http://www.winehq.org/.."
,
0
,
S_OK
,
"http://www.winehq.org/.."
,
FALSE
},
{
"http://www.winehq.org/tests/tests2/../../tests"
,
0
,
S_OK
,
"http://www.winehq.org/tests"
,
FALSE
},
{
"http://www.winehq.org/tests/../tests"
,
0
,
S_OK
,
"http://www.winehq.org/tests"
,
FALSE
},
{
"http://www.winehq.org/tests
\n
"
,
URL_WININET_COMPATIBILITY
|
URL_ESCAPE_SPACES_ONLY
|
URL_ESCAPE_UNSAFE
,
S_OK
,
"http://www.winehq.org/tests"
,
FALSE
},
{
"http://www.winehq.org/tests
\r
"
,
URL_WININET_COMPATIBILITY
|
URL_ESCAPE_SPACES_ONLY
|
URL_ESCAPE_UNSAFE
,
S_OK
,
"http://www.winehq.org/tests"
,
FALSE
},
...
...
@@ -158,6 +160,8 @@ static const TEST_URL_CANONICALIZE TEST_CANONICALIZE[] = {
{
"res://c:
\\
tests/res
\\
foo%20bar/strange
\\
sth"
,
URL_FILE_USE_PATHURL
,
S_OK
,
"res://c:
\\
tests/res
\\
foo%20bar/strange
\\
sth"
,
FALSE
},
{
"res://c:
\\
tests/res
\\
foo%20bar/strange
\\
sth"
,
URL_UNESCAPE
,
S_OK
,
"res://c:
\\
tests/res
\\
foo bar/strange
\\
sth"
,
FALSE
},
{
"A"
,
0
,
S_OK
,
"A"
,
FALSE
},
{
"../A"
,
0
,
S_OK
,
"../A"
,
FALSE
},
{
"A/../B"
,
0
,
S_OK
,
"B"
,
TRUE
},
{
"/uri-res/N2R?urn:sha1:B3K"
,
URL_DONT_ESCAPE_EXTRA_INFO
|
URL_WININET_COMPATIBILITY
/*0x82000000*/
,
S_OK
,
"/uri-res/N2R?urn:sha1:B3K"
,
FALSE
}
/*LimeWire online installer calls this*/
,
{
"http:www.winehq.org/dir/../index.html"
,
0
,
S_OK
,
"http:www.winehq.org/index.html"
},
{
"http://localhost/test.html"
,
URL_FILE_USE_PATHURL
,
S_OK
,
"http://localhost/test.html"
},
...
...
dlls/shlwapi/url.c
View file @
b7c68573
...
...
@@ -444,38 +444,38 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized,
*
wk2
++
=
*
wk1
;
wk1
++
;
if
(
*
wk1
==
'.'
)
{
while
(
*
wk1
==
'.'
)
{
TRACE
(
"found '/.'
\n
"
);
if
(
wk1
[
1
]
==
'/'
||
wk1
[
1
]
==
'\\'
)
{
/* case of /./ -> skip the ./ */
wk1
+=
2
;
}
else
if
(
wk1
[
1
]
==
'.'
)
{
/* found /.. look for next / */
TRACE
(
"found '/..'
\n
"
);
if
(
wk1
[
2
]
==
'/'
||
wk1
[
2
]
==
'\\'
||
wk1
[
2
]
==
'?'
||
wk1
[
2
]
==
'#'
||
!
wk1
[
2
])
{
/* case /../ -> need to backup wk2 */
TRACE
(
"found '/../'
\n
"
);
*
(
wk2
-
1
)
=
'\0'
;
/* set end of string */
mp
=
strrchrW
(
root
,
'/'
);
mp2
=
strrchrW
(
root
,
'\\'
);
if
(
mp2
&&
(
!
mp
||
mp2
<
mp
))
mp
=
mp2
;
if
(
mp
&&
(
mp
>=
root
))
{
/* found valid backup point */
wk2
=
mp
+
1
;
if
(
wk1
[
2
]
!=
'/'
&&
wk1
[
2
]
!=
'\\'
)
wk1
+=
2
;
else
wk1
+=
3
;
}
else
{
/* did not find point, restore '/' */
*
(
wk2
-
1
)
=
slash
;
}
else
if
(
wk1
[
1
]
==
'.'
&&
(
wk1
[
2
]
==
'/'
||
wk1
[
2
]
==
'\\'
||
wk1
[
2
]
==
'?'
||
wk1
[
2
]
==
'#'
||
!
wk1
[
2
]))
{
/* case /../ -> need to backup wk2 */
TRACE
(
"found '/../'
\n
"
);
*
(
wk2
-
1
)
=
'\0'
;
/* set end of string */
mp
=
strrchrW
(
root
,
'/'
);
mp2
=
strrchrW
(
root
,
'\\'
);
if
(
mp2
&&
(
!
mp
||
mp2
<
mp
))
mp
=
mp2
;
if
(
mp
&&
(
mp
>=
root
))
{
/* found valid backup point */
wk2
=
mp
+
1
;
if
(
wk1
[
2
]
!=
'/'
&&
wk1
[
2
]
!=
'\\'
)
wk1
+=
2
;
else
wk1
+=
3
;
}
else
{
/* did not find point, restore '/' */
*
(
wk2
-
1
)
=
slash
;
break
;
}
}
else
break
;
}
}
*
wk2
=
'\0'
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment