You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by rp...@apache.org on 2007/12/09 17:04:16 UTC
svn commit: r602690 - in /apr/apr-util/branches/1.2.x: CHANGES
test/testuri.c uri/apr_uri.c
Author: rpluem
Date: Sun Dec 9 08:04:15 2007
New Revision: 602690
URL: http://svn.apache.org/viewvc?rev=602690&view=rev
Log:
Merge r594624 from trunk:
Add better scheme/host parsing to apr_uri.
Submitted by: Henry Jen <henryjen ztune.net>
Reviewed by: rpluem
Modified:
apr/apr-util/branches/1.2.x/CHANGES
apr/apr-util/branches/1.2.x/test/testuri.c
apr/apr-util/branches/1.2.x/uri/apr_uri.c
Modified: apr/apr-util/branches/1.2.x/CHANGES
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.2.x/CHANGES?rev=602690&r1=602689&r2=602690&view=diff
==============================================================================
--- apr/apr-util/branches/1.2.x/CHANGES [utf-8] (original)
+++ apr/apr-util/branches/1.2.x/CHANGES [utf-8] Sun Dec 9 08:04:15 2007
@@ -2,6 +2,9 @@
Changes with APR-util 1.2.13
+ *) Add better scheme/host parsing to apr_uri.
+ [Henry Jen <henryjen ztune.net>]
+
*) Fix the make test target in the spec file. [Graham Leggett]
Changes with APR-util 1.2.12
Modified: apr/apr-util/branches/1.2.x/test/testuri.c
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.2.x/test/testuri.c?rev=602690&r1=602689&r2=602690&view=diff
==============================================================================
--- apr/apr-util/branches/1.2.x/test/testuri.c (original)
+++ apr/apr-util/branches/1.2.x/test/testuri.c Sun Dec 9 08:04:15 2007
@@ -95,6 +95,30 @@
"//www.apache.org/",
0, NULL, "www.apache.org", NULL, NULL, "www.apache.org", NULL, "/", NULL, NULL, 0
},
+ {
+ "file:image.jpg",
+ 0, "file", NULL, NULL, NULL, NULL, NULL, "image.jpg", NULL, NULL, 0
+ },
+ {
+ "file:/image.jpg",
+ 0, "file", NULL, NULL, NULL, NULL, NULL, "/image.jpg", NULL, NULL, 0
+ },
+ {
+ "file:///image.jpg",
+ 0, "file", "", NULL, NULL, "", NULL, "/image.jpg", NULL, NULL, 0
+ },
+ {
+ "file:///tmp/photos/image.jpg",
+ 0, "file", "", NULL, NULL, "", NULL, "/tmp/photos/image.jpg", NULL, NULL, 0
+ },
+ {
+ "file:./image.jpg",
+ 0, "file", NULL, NULL, NULL, NULL, NULL, "./image.jpg", NULL, NULL, 0
+ },
+ {
+ "file:../photos/image.jpg",
+ 0, "file", NULL, NULL, NULL, NULL, NULL, "../photos/image.jpg", NULL, NULL, 0
+ },
};
struct uph_test {
Modified: apr/apr-util/branches/1.2.x/uri/apr_uri.c
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.2.x/uri/apr_uri.c?rev=602690&r1=602689&r2=602690&view=diff
==============================================================================
--- apr/apr-util/branches/1.2.x/uri/apr_uri.c (original)
+++ apr/apr-util/branches/1.2.x/uri/apr_uri.c Sun Dec 9 08:04:15 2007
@@ -92,6 +92,12 @@
unsigned flags)
{
char *ret = "";
+ char *scheme = NULL;
+
+ if (uptr->scheme) {
+ scheme = apr_pstrcat(p, uptr->scheme, ":", NULL);
+ }
+
/* If suppressing the site part, omit both user name & scheme://hostname */
if (!(flags & APR_URI_UNP_OMITSITEPART)) {
@@ -129,29 +135,15 @@
uptr->port == 0 ||
uptr->port == apr_uri_port_of_scheme(uptr->scheme));
- if (uptr->scheme) {
- ret = apr_pstrcat(p,
- uptr->scheme, "://", ret,
- lbrk, uptr->hostname, rbrk,
- is_default_port ? "" : ":",
- is_default_port ? "" : uptr->port_str,
- NULL);
- }
- else {
- /* A violation of RFC2396, but it is clear from section 3.2
- * that the : belongs above to the scheme, while // belongs
- * to the authority, so include the authority prefix while
- * omitting the "scheme:" that the user neglected to pass us.
- */
- ret = apr_pstrcat(p,
- "//", ret, lbrk, uptr->hostname, rbrk,
- is_default_port ? "" : ":",
- is_default_port ? "" : uptr->port_str,
- NULL);
- }
+ ret = apr_pstrcat(p, "//", ret, lbrk, uptr->hostname, rbrk,
+ is_default_port ? "" : ":",
+ is_default_port ? "" : uptr->port_str,
+ NULL);
}
}
+ ret = apr_pstrcat(p, scheme ? scheme : "", ret, NULL);
+
/* Should we suppress all path info? */
if (!(flags & APR_URI_UNP_OMITPATHINFO)) {
/* Append path, query and fragment strings: */
@@ -324,12 +316,17 @@
while ((uri_delims[*(unsigned char *)s] & NOTEND_SCHEME) == 0) {
++s;
}
- /* scheme must be non-empty and followed by :// */
- if (s == uri || s[0] != ':' || s[1] != '/' || s[2] != '/') {
+ /* scheme must be non-empty and followed by : */
+ if (s == uri || s[0] != ':') {
goto deal_with_path; /* backwards predicted taken! */
}
uptr->scheme = apr_pstrmemdup(p, uri, s - uri);
+ if (s[1] != '/' || s[2] != '/') {
+ uri = s + 1;
+ goto deal_with_path;
+ }
+
s += 3;
deal_with_authority: