Author: stsp
Date: Tue Sep  3 15:45:53 2019
New Revision: 1866328

URL: http://svn.apache.org/viewvc?rev=1866328&view=rev
Log:
Use more of the new _safe variants of canonicalization functions.

This commit converts all relevant function calls in libsvn_repos.

* subversion/libsvn_repos/commit.c
  (add_file_or_directory, delete_entry, open_directory, open_file): Use
    svn_relpath_canonicalize_safe() instead of svn_relpath_canonicalize().

* subversion/libsvn_repos/delta.c
  (svn_repos_dir_delta2): Use svn_relpath_canonicalize_safe() instead of
    svn_relpath_canonicalize().

* subversion/libsvn_repos/dump.c
  (make_dir_baton): Convert to return an svn_error_t and use
    svn_relpath_canonicalize_safe() instead of svn_relpath_canonicalize().
  (open_root, add_directory, open_directory): Update callers.
  (dump_node): Use svn_relpath_canonicalize_safe() instead of
    svn_relpath_canonicalize().

* subversion/libsvn_repos/dump_editor.c
  (make_dir_baton): Convert to return an svn_error_t and use
    svn_relpath_canonicalize_safe() instead of svn_relpath_canonicalize().
  (open_root, add_directory, open_directory): Update callers.

* subversion/libsvn_repos/load-fs-vtable.c
  (prefix_mergeinfo_paths, make_node_baton, svn_repos_get_fs_build_parser6):
    Use svn_relpath_canonicalize_safe() instead of svn_relpath_canonicalize().

Modified:
    subversion/trunk/subversion/libsvn_repos/commit.c
    subversion/trunk/subversion/libsvn_repos/delta.c
    subversion/trunk/subversion/libsvn_repos/dump.c
    subversion/trunk/subversion/libsvn_repos/dump_editor.c
    subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c

Modified: subversion/trunk/subversion/libsvn_repos/commit.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/commit.c?rev=1866328&r1=1866327&r2=1866328&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/commit.c (original)
+++ subversion/trunk/subversion/libsvn_repos/commit.c Tue Sep  3 15:45:53 2019
@@ -306,13 +306,14 @@ add_file_or_directory(const char *path,
   struct edit_baton *eb = pb->edit_baton;
   apr_pool_t *subpool = svn_pool_create(pool);
   svn_boolean_t was_copied = FALSE;
-  const char *full_path;
+  const char *full_path, *canonicalized_path;
 
   /* Reject paths which contain control characters (related to issue #4340). */
   SVN_ERR(svn_path_check_valid(path, pool));
 
-  full_path = svn_fspath__join(eb->base_path,
-                               svn_relpath_canonicalize(path, pool), pool);
+  SVN_ERR(svn_relpath_canonicalize_safe(&canonicalized_path, NULL, path,
+                                        pool, pool));
+  full_path = svn_fspath__join(eb->base_path, canonicalized_path, pool);
 
   /* Sanity check. */
   if (copy_path && (! SVN_IS_VALID_REVNUM(copy_revision)))
@@ -477,10 +478,11 @@ delete_entry(const char *path,
   struct edit_baton *eb = parent->edit_baton;
   svn_node_kind_t kind;
   svn_repos_authz_access_t required = svn_authz_write;
-  const char *full_path;
+  const char *full_path, *canonicalized_path;
 
-  full_path = svn_fspath__join(eb->base_path,
-                               svn_relpath_canonicalize(path, pool), pool);
+  SVN_ERR(svn_relpath_canonicalize_safe(&canonicalized_path, NULL, path,
+                                        pool, pool));
+  full_path = svn_fspath__join(eb->base_path, canonicalized_path, pool);
 
   /* Check PATH in our transaction.  */
   SVN_ERR(svn_fs_check_path(&kind, eb->txn_root, full_path, pool));
@@ -538,10 +540,11 @@ open_directory(const char *path,
   struct dir_baton *pb = parent_baton;
   struct edit_baton *eb = pb->edit_baton;
   svn_node_kind_t kind;
-  const char *full_path;
+  const char *full_path, *canonicalized_path;
 
-  full_path = svn_fspath__join(eb->base_path,
-                               svn_relpath_canonicalize(path, pool), pool);
+  SVN_ERR(svn_relpath_canonicalize_safe(&canonicalized_path, NULL, path,
+                                        pool, pool));
+  full_path = svn_fspath__join(eb->base_path, canonicalized_path, pool);
 
   /* Check PATH in our transaction.  If it does not exist,
      return a 'Path not present' error. */
@@ -611,10 +614,11 @@ open_file(const char *path,
   struct edit_baton *eb = pb->edit_baton;
   svn_revnum_t cr_rev;
   apr_pool_t *subpool = svn_pool_create(pool);
-  const char *full_path;
+  const char *full_path, *canonicalized_path;
 
-  full_path = svn_fspath__join(eb->base_path,
-                               svn_relpath_canonicalize(path, pool), pool);
+  SVN_ERR(svn_relpath_canonicalize_safe(&canonicalized_path, NULL, path,
+                                        pool, pool));
+  full_path = svn_fspath__join(eb->base_path, canonicalized_path, pool);
 
   /* Check for read authorization. */
   SVN_ERR(check_authz(eb, full_path, eb->txn_root,

Modified: subversion/trunk/subversion/libsvn_repos/delta.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/delta.c?rev=1866328&r1=1866327&r2=1866328&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/delta.c (original)
+++ subversion/trunk/subversion/libsvn_repos/delta.c Tue Sep  3 15:45:53 2019
@@ -215,7 +215,7 @@ svn_repos_dir_delta2(svn_fs_root_t *src_
 {
   void *root_baton = NULL;
   struct context c;
-  const char *src_fullpath;
+  const char *src_fullpath, *canonicalized_path;
   svn_node_kind_t src_kind, tgt_kind;
   svn_revnum_t rootrev;
   svn_fs_node_relation_t relation;
@@ -223,14 +223,22 @@ svn_repos_dir_delta2(svn_fs_root_t *src_
 
   /* SRC_PARENT_DIR must be valid. */
   if (src_parent_dir)
-    src_parent_dir = svn_relpath_canonicalize(src_parent_dir, pool);
+    {
+      SVN_ERR(svn_relpath_canonicalize_safe(&canonicalized_path, NULL,
+                                            src_parent_dir, pool, pool));
+      src_parent_dir = canonicalized_path;
+    }
   else
     return svn_error_create(SVN_ERR_FS_NOT_DIRECTORY, 0,
                             "Invalid source parent directory '(null)'");
 
   /* TGT_FULLPATH must be valid. */
   if (tgt_fullpath)
-    tgt_fullpath = svn_relpath_canonicalize(tgt_fullpath, pool);
+    {
+      SVN_ERR(svn_relpath_canonicalize_safe(&canonicalized_path, NULL,
+                                            tgt_fullpath, pool, pool));
+      tgt_fullpath = canonicalized_path;
+    }
   else
     return svn_error_create(SVN_ERR_FS_PATH_SYNTAX, 0,
                             _("Invalid target path"));

Modified: subversion/trunk/subversion/libsvn_repos/dump.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/dump.c?rev=1866328&r1=1866327&r2=1866328&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/dump.c (original)
+++ subversion/trunk/subversion/libsvn_repos/dump.c Tue Sep  3 15:45:53 2019
@@ -738,8 +738,9 @@ struct dir_baton
    or NULL if this is the top-level directory of the edit.
 
    Perform all allocations in POOL.  */
-static struct dir_baton *
-make_dir_baton(const char *path,
+static struct svn_error_t *
+make_dir_baton(struct dir_baton **dbp,
+               const char *path,
                const char *cmp_path,
                svn_revnum_t cmp_rev,
                void *edit_baton,
@@ -748,10 +749,10 @@ make_dir_baton(const char *path,
 {
   struct edit_baton *eb = edit_baton;
   struct dir_baton *new_db = apr_pcalloc(pool, sizeof(*new_db));
-  const char *full_path;
+  const char *full_path, *canonicalized_path;
 
   /* A path relative to nothing?  I don't think so. */
-  SVN_ERR_ASSERT_NO_RETURN(!path || pb);
+  SVN_ERR_ASSERT(!path || pb);
 
   /* Construct the full path of this node. */
   if (pb)
@@ -761,7 +762,11 @@ make_dir_baton(const char *path,
 
   /* Remove leading slashes from copyfrom paths. */
   if (cmp_path)
-    cmp_path = svn_relpath_canonicalize(cmp_path, pool);
+    {
+      SVN_ERR(svn_relpath_canonicalize_safe(&canonicalized_path, NULL,
+                                            cmp_path, pool, pool));
+      cmp_path = canonicalized_path;
+    }
 
   new_db->edit_baton = eb;
   new_db->path = full_path;
@@ -772,7 +777,8 @@ make_dir_baton(const char *path,
   new_db->check_name_collision = FALSE;
   new_db->pool = pool;
 
-  return new_db;
+  *dbp = new_db;
+  return SVN_NO_ERROR;
 }
 
 static svn_error_t *
@@ -1168,7 +1174,12 @@ dump_node(struct edit_baton *eb,
 
   /* Remove leading slashes from copyfrom paths. */
   if (cmp_path)
-    cmp_path = svn_relpath_canonicalize(cmp_path, pool);
+    {
+      const char *canonicalized_path;
+      SVN_ERR(svn_relpath_canonicalize_safe(&canonicalized_path, NULL,
+                                            cmp_path, pool, pool));
+      cmp_path = canonicalized_path;
+    }
 
   /* Validate the comparison path/rev. */
   if (ARE_VALID_COPY_ARGS(cmp_path, cmp_rev))
@@ -1538,9 +1549,9 @@ open_root(void *edit_baton,
           apr_pool_t *pool,
           void **root_baton)
 {
-  *root_baton = make_dir_baton(NULL, NULL, SVN_INVALID_REVNUM,
-                               edit_baton, NULL, pool);
-  return SVN_NO_ERROR;
+  return svn_error_trace(make_dir_baton((struct dir_baton **)root_baton,
+                                        NULL, NULL, SVN_INVALID_REVNUM,
+                                        edit_baton, NULL, pool));
 }
 
 
@@ -1572,8 +1583,10 @@ add_directory(const char *path,
   struct edit_baton *eb = pb->edit_baton;
   void *was_deleted;
   svn_boolean_t is_copy = FALSE;
-  struct dir_baton *new_db
-    = make_dir_baton(path, copyfrom_path, copyfrom_rev, eb, pb, pool);
+  struct dir_baton *new_db;
+
+  SVN_ERR(make_dir_baton(&new_db, path, copyfrom_path, copyfrom_rev, eb,
+                         pb, pool));
 
   /* This might be a replacement -- is the path already deleted? */
   was_deleted = svn_hash_gets(pb->deleted_entries, path);
@@ -1630,7 +1643,7 @@ open_directory(const char *path,
       cmp_rev = pb->cmp_rev;
     }
 
-  new_db = make_dir_baton(path, cmp_path, cmp_rev, eb, pb, pool);
+  SVN_ERR(make_dir_baton(&new_db, path, cmp_path, cmp_rev, eb, pb, pool));
   *child_baton = new_db;
   return SVN_NO_ERROR;
 }

Modified: subversion/trunk/subversion/libsvn_repos/dump_editor.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/dump_editor.c?rev=1866328&r1=1866327&r2=1866328&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/dump_editor.c (original)
+++ subversion/trunk/subversion/libsvn_repos/dump_editor.c Tue Sep  3 15:45:53 
2019
@@ -178,8 +178,9 @@ struct dump_edit_baton {
  * this is the top-level directory of the edit.
  *
  * Perform all allocations in POOL.  */
-static struct dir_baton *
-make_dir_baton(const char *path,
+static struct svn_error_t *
+make_dir_baton(struct dir_baton **dbp,
+               const char *path,
                const char *copyfrom_path,
                svn_revnum_t copyfrom_rev,
                void *edit_baton,
@@ -192,7 +193,8 @@ make_dir_baton(const char *path,
 
   /* Construct the full path of this node. */
   if (pb)
-    repos_relpath = svn_relpath_canonicalize(path, pool);
+    SVN_ERR(svn_relpath_canonicalize_safe(&repos_relpath, NULL, path,
+                                          pool, pool));
   else
     repos_relpath = "";
 
@@ -213,7 +215,8 @@ make_dir_baton(const char *path,
   new_db->deleted_props = apr_hash_make(pool);
   new_db->deleted_entries = apr_hash_make(pool);
 
-  return new_db;
+  *dbp = new_db;
+  return SVN_NO_ERROR;
 }
 
 /* Make a file baton to represent the directory at PATH (relative to
@@ -577,8 +580,8 @@ open_root(void *edit_baton,
             {
               /* ... but for the source directory itself, we'll defer
                  to letting the typical plumbing handle this task. */
-              new_db = make_dir_baton(NULL, NULL, SVN_INVALID_REVNUM,
-                                      edit_baton, NULL, pool);
+              SVN_ERR(make_dir_baton(&new_db, NULL, NULL, SVN_INVALID_REVNUM,
+                                     edit_baton, NULL, pool));
               SVN_ERR(dump_node(&new_db->headers,
                                 eb, new_db->repos_relpath, new_db,
                                 NULL, svn_node_action_add, FALSE,
@@ -594,8 +597,8 @@ open_root(void *edit_baton,
 
   if (! new_db)
     {
-      new_db = make_dir_baton(NULL, NULL, SVN_INVALID_REVNUM,
-                              edit_baton, NULL, pool);
+      SVN_ERR(make_dir_baton(&new_db, NULL, NULL, SVN_INVALID_REVNUM,
+                             edit_baton, NULL, pool));
     }
 
   *root_baton = new_db;
@@ -636,8 +639,8 @@ add_directory(const char *path,
 
   SVN_ERR(dump_pending_dir(pb->eb, pool));
 
-  new_db = make_dir_baton(path, copyfrom_path, copyfrom_rev, pb->eb,
-                          pb, pb->pool);
+  SVN_ERR(make_dir_baton(&new_db, path, copyfrom_path, copyfrom_rev, pb->eb,
+                         pb, pb->pool));
 
   /* This might be a replacement -- is the path already deleted? */
   was_deleted = svn_hash_gets(pb->deleted_entries, path);
@@ -690,8 +693,8 @@ open_directory(const char *path,
       copyfrom_rev = pb->copyfrom_rev;
     }
 
-  new_db = make_dir_baton(path, copyfrom_path, copyfrom_rev, pb->eb, pb,
-                          pb->pool);
+  SVN_ERR(make_dir_baton(&new_db, path, copyfrom_path, copyfrom_rev,
+                         pb->eb, pb, pb->pool));
 
   *child_baton = new_db;
   return SVN_NO_ERROR;

Modified: subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c?rev=1866328&r1=1866327&r2=1866328&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c (original)
+++ subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c Tue Sep  3 
15:45:53 2019
@@ -213,9 +213,11 @@ prefix_mergeinfo_paths(svn_string_t **me
     {
       const char *merge_source = apr_hash_this_key(hi);
       svn_rangelist_t *rangelist = apr_hash_this_val(hi);
-      const char *path;
+      const char *path, *canonicalized_path;
 
-      merge_source = svn_relpath_canonicalize(merge_source, pool);
+      SVN_ERR(svn_relpath_canonicalize_safe(&canonicalized_path, NULL,
+                                       merge_source, pool, pool));
+      merge_source = canonicalized_path;
 
       /* The svn:mergeinfo property syntax demands a repos abspath */
       path = svn_fspath__canonicalize(svn_relpath_join(parent_dir,
@@ -377,7 +379,10 @@ make_node_baton(struct node_baton **node
   /* Then add info from the headers.  */
   if ((val = svn_hash_gets(headers, SVN_REPOS_DUMPFILE_NODE_PATH)))
   {
-    val = svn_relpath_canonicalize(val, pool);
+    const char *canonicalized_path;
+    SVN_ERR(svn_relpath_canonicalize_safe(&canonicalized_path, NULL,
+                                          val, pool, pool));
+    val = canonicalized_path;
     if (rb->pb->parent_dir)
       nb->path = svn_relpath_join(rb->pb->parent_dir, val, pool);
     else
@@ -1202,7 +1207,12 @@ svn_repos_get_fs_build_parser6(const svn
   struct parse_baton *pb = apr_pcalloc(pool, sizeof(*pb));
 
   if (parent_dir)
-    parent_dir = svn_relpath_canonicalize(parent_dir, pool);
+    {
+      const char *canonicalized_path;
+      SVN_ERR(svn_relpath_canonicalize_safe(&canonicalized_path, NULL,
+                                            parent_dir, pool, pool));
+      parent_dir = canonicalized_path;
+    }
 
   SVN_ERR_ASSERT((SVN_IS_VALID_REVNUM(start_rev) &&
                   SVN_IS_VALID_REVNUM(end_rev))


Reply via email to