Author: rhuijben
Date: Wed May  4 00:04:29 2011
New Revision: 1099298

URL: http://svn.apache.org/viewvc?rev=1099298&view=rev
Log:
In libsvn_ra_serf check if a reparenting operation doesn't step outside the
repository. This matches the test performed by ra_local.

* subversion/libsvn_ra_serf/serf.c
  (svn_ra_serf__reparent): Verify if the new session uri is still in the same
    repository.

Modified:
    subversion/trunk/subversion/libsvn_ra_serf/serf.c

Modified: subversion/trunk/subversion/libsvn_ra_serf/serf.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/serf.c?rev=1099298&r1=1099297&r2=1099298&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/serf.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/serf.c Wed May  4 00:04:29 2011
@@ -456,7 +456,20 @@ svn_ra_serf__reparent(svn_ra_session_t *
       return SVN_NO_ERROR;
     }
 
-  /* Do we need to check that it's the same host and port? */
+  if (!session->repos_root_str)
+    {
+      const char *vcc_url;
+      SVN_ERR(svn_ra_serf__discover_vcc(&vcc_url, session, NULL, pool));
+    }
+
+  if (!svn_uri_is_ancestor(session->repos_root_str, url))
+    {
+      return svn_error_createf(
+          SVN_ERR_RA_ILLEGAL_URL, NULL,
+          _("URL '%s' is not a child of the session's repository root "
+            "URL '%s'"), url, session->repos_root_str);
+    }
+
   status = apr_uri_parse(session->pool, url, &new_url);
   if (status)
     {


Reply via email to