-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Julian Foad wrote: [..] > In the second place it is used, we know it holds a URL: > >> case ELEM_href: >> /* Special handling for <href> that belongs to the <response> tag. */ >> if (rsrc->href_parent == ELEM_response) >> return assign_rsrc_url(pc->rsrc, cdata, pc->pool); > > That's where we can canonicalize it. And are there any other places > where the "cdata" variable is known to hold a URL? I'm looking... No, > there are no others. In all the rest of the places, it is providing a > generic "property value". > > With that fix, I believe the patch will be correct.
Thank you for the comments, Julian. I thought it's better to canonicalize in the first place, but should be otherwise! Attaching the updated patch as per your feedback, herewith. [[[ Log: Ensure the URLs in libsvn_ra_neon are always canonical. [ in subversion/libsvn_ra_neon ] * ra_neon.h (svn_ra_neon__request_get_location): Update doc string to reflect that it returns a canonicalized URL. * util.c (svn_ra_neon__request_get_location): Canonicalize the 'BASE URL' as per the rule. * props.c (end_element): Same. * options.c (end_element): Same. Found by: stsp Suggested by: stsp, julianfoad Patch by: Kannan R <kann...@collab.net> ]]] - -- Thanks & Regards, Kannan -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQEVAwUBS1hA93lTqcY7ytmIAQIKLgf+P5n39GaVhl53zJ4oaEQOVMMX0ovSerqQ Taakt6wLMuQREhnCoLzivk8phn3zyFXRV4wiqFly94X2wKFcKCX/K3I4nheecM5W j/+DPQo4MLnFZDh8eJXuI4RpCR6+iP5Vz0wciE2nsVYt3+EJFGtqm+ZQTkgmj2iX QnuVe55/GfNjIcsrqmJnjhwJ8W/YbKeBUq2iueeUPcC0m6T60WfK6Fy/3aEVVCYn W/7TshgnFClyLdfAXDF8byrf5+fYDRjH49LBv7IMcd8A4krALCZ4+whYIIQNS2A7 byBGrTdViBtWr5vOO0POQEWwYMX8J9pLc5dNP/3LlzaM8CGReXb2AA== =Fqzw -----END PGP SIGNATURE-----
Index: subversion/libsvn_ra_neon/ra_neon.h =================================================================== --- subversion/libsvn_ra_neon/ra_neon.h (revision 901660) +++ subversion/libsvn_ra_neon/ra_neon.h (working copy) @@ -973,6 +973,7 @@ apr_pool_t *pool); /* Return the Location HTTP header or NULL if none was sent. + * (Return a canonical URL even if the header ended with a slash.) * * Do allocations in POOL. */ Index: subversion/libsvn_ra_neon/util.c =================================================================== --- subversion/libsvn_ra_neon/util.c (revision 901660) +++ subversion/libsvn_ra_neon/util.c (working copy) @@ -1490,5 +1490,5 @@ apr_pool_t *pool) { const char *val = ne_get_response_header(request->ne_req, "Location"); - return val ? apr_pstrdup(pool, val) : NULL; + return val ? svn_uri_canonicalize(val, pool) : NULL; } Index: subversion/libsvn_ra_neon/options.c =================================================================== --- subversion/libsvn_ra_neon/options.c (revision 901660) +++ subversion/libsvn_ra_neon/options.c (working copy) @@ -107,7 +107,9 @@ options_ctx_t *oc = baton; if (state == ELEM_href) - oc->activity_coll = svn_string_create_from_buf(oc->cdata, oc->pool); + oc->activity_coll = svn_string_create(svn_uri_canonicalize(oc->cdata->data, + oc->pool), + oc->pool); return SVN_NO_ERROR; } Index: subversion/libsvn_ra_neon/props.c =================================================================== --- subversion/libsvn_ra_neon/props.c (revision 901660) +++ subversion/libsvn_ra_neon/props.c (working copy) @@ -413,7 +413,8 @@ case ELEM_href: /* Special handling for <href> that belongs to the <response> tag. */ if (rsrc->href_parent == ELEM_response) - return assign_rsrc_url(pc->rsrc, cdata, pc->pool); + return assign_rsrc_url(pc->rsrc, svn_uri_canonicalize(cdata, pc->pool), + pc->pool); /* Use the parent element's name, not the href. */ parent_defn = defn_from_id(rsrc->href_parent);