-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Julian Foad wrote:
[..]
>> No, it should create a canonical URL. The fix we need is inside
>> svn_ra_neon__request_get_location(), or at least we need to look inside
>> that function to see where the non-canonical URL is coming from, and
>> maybe trace further back to find the cause of the problem.
> 
> Oops, typo. Meant to ask for canonical. I'll give a shot to try where
> the non-canonicalized is possibly created in ..get_location().

`svn_ra_neon__request_get_location()' returns the non-canonical URL
which is obtained from the `ne_get_response_header()'(third party
function). Attaching the updated patch to canonicalize the URLs.

[[[
Log:
Ensure the URLs are canonical before passing to the new
`svn_path_url_add_component2()'.

[ in subversion/libsvn_ra_neon ]

* util.c
  (svn_ra_neon__request_get_location): Canonicalize the 'BASE URL' as
  `svn_path_url_add_component2()' won't handle it.

* props.c
  (svn_ra_neon__get_baseline_info, svn_ra_neon__get_one_prop): Same.

* options.c
  (svn_ra_neon__exchange_capabilities): 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/

iQEVAwUBSzDONnlTqcY7ytmIAQJGfwf9FfnMJJbYYEg3uimSYpvv2fOjwM5pf9DL
A7tWd3UxPq4gHza2mZYoXRZELnVo9xbKGozoxpQLUqcVmrS9dDZd+C/SUtypxMMz
QwNyC9VKre2DVvI9n9+VSQNU11eAwIVf86OHyln4fBpmqf9czKkqcjxphGntrhSa
iGpKHgFnILekScqIgvsqVu9Rs1tr89daQnlQVaDtHo9UVTm3MvyuOshZLLIEezUA
LmA1EyB0V/Y/uiE3JgXfY7hXm7o/b0fF1coQ9UDeqkR/Z8zADHh64y6dClxpKhVM
SU9e95JTNG1+XXmoCg1NC9VsOuQNDJRphEx/FpdSHWpmFa9U+Chfjw==
=GGUJ
-----END PGP SIGNATURE-----
Index: subversion/libsvn_ra_neon/util.c
===================================================================
--- subversion/libsvn_ra_neon/util.c	(revision 893084)
+++ 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/props.c
===================================================================
--- subversion/libsvn_ra_neon/props.c	(revision 893084)
+++ subversion/libsvn_ra_neon/props.c	(working copy)
@@ -619,6 +619,7 @@
   ne_propname props[2] = { { 0 } };
   const char *name;
   const svn_string_t *value;
+  svn_string_t *canonicalized_baseline_url;
 
   props[0] = *propname;
   SVN_ERR(svn_ra_neon__get_props_resource(&rsrc, sess, url, label, props,
@@ -634,7 +635,12 @@
                                name, url);
     }
 
-  *propval = value;
+  canonicalized_baseline_url = svn_string_create(svn_uri_canonicalize
+                                                 (value->data,
+                                                  pool),
+                                                 pool);
+
+  *propval = canonicalized_baseline_url;
   return SVN_NO_ERROR;
 }
 
@@ -959,7 +965,7 @@
 {
   svn_ra_neon__resource_t *baseline_rsrc, *rsrc;
   const svn_string_t *my_bc_url;
-  svn_string_t my_bc_rel;
+  svn_string_t my_bc_rel, *canonicalized_bc_url;
 
   /* Go fetch a BASELINE_RSRC that contains specific properties we
      want.  This routine will also fill in BC_RELATIVE as best it
@@ -989,9 +995,12 @@
                                 "on the baseline resource"));
     }
 
+  canonicalized_bc_url = svn_string_create(svn_uri_canonicalize(my_bc_url->data,
+                                                                pool), pool);
+
   /* maybe return bc_url to the caller */
   if (bc_url)
-    *bc_url = *my_bc_url;
+    *bc_url = *canonicalized_bc_url;
 
   if (latest_rev != NULL)
     {
Index: subversion/libsvn_ra_neon/options.c
===================================================================
--- subversion/libsvn_ra_neon/options.c	(revision 893084)
+++ subversion/libsvn_ra_neon/options.c	(working copy)
@@ -294,7 +294,7 @@
       goto cleanup;
     }
 
-  ras->act_coll = apr_pstrdup(ras->pool, oc.activity_coll->data);
+  ras->act_coll = svn_uri_canonicalize(oc.activity_coll->data, ras->pool);
   parse_capabilities(req->ne_req, ras, pool);
 
  cleanup:

Reply via email to