You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2018/06/19 14:33:25 UTC

svn commit: r1833848 - /subversion/trunk/subversion/libsvn_client/conflicts.c

Author: stsp
Date: Tue Jun 19 14:33:25 2018
New Revision: 1833848

URL: http://svn.apache.org/viewvc?rev=1833848&view=rev
Log:
Avoid potential (start_rev > end_rev) assertion failure in conflict resolver.

* subversion/libsvn_client/conflicts.c
  (conflict_tree_get_details_incoming_delete): Make sure the end_rev
   parameter provided to find_revision_for_suspected_deletion() is
   greater than the start revision.

Modified:
    subversion/trunk/subversion/libsvn_client/conflicts.c

Modified: subversion/trunk/subversion/libsvn_client/conflicts.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/conflicts.c?rev=1833848&r1=1833847&r2=1833848&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/conflicts.c (original)
+++ subversion/trunk/subversion/libsvn_client/conflicts.c Tue Jun 19 14:33:25 2018
@@ -4899,6 +4899,7 @@ conflict_tree_get_details_incoming_delet
           const char *parent_repos_relpath;
           svn_revnum_t parent_peg_rev;
           svn_revnum_t deleted_rev;
+          svn_revnum_t end_rev;
           const char *deleted_rev_author;
           svn_node_kind_t replacing_node_kind;
           apr_array_header_t *moves;
@@ -4931,12 +4932,15 @@ conflict_tree_get_details_incoming_delet
               related_peg_rev = SVN_INVALID_REVNUM;
             }
 
+          end_rev = (new_kind == svn_node_none ? 0 : old_rev);
+          if (end_rev >= parent_peg_rev)
+            end_rev = (parent_peg_rev > 0 ? parent_peg_rev - 1 : 0);
+
           SVN_ERR(find_revision_for_suspected_deletion(
                     &deleted_rev, &deleted_rev_author, &replacing_node_kind,
                     &moves, conflict,
                     svn_dirent_basename(conflict->local_abspath, scratch_pool),
-                    parent_repos_relpath, parent_peg_rev,
-                    new_kind == svn_node_none ? 0 : old_rev,
+                    parent_repos_relpath, parent_peg_rev, end_rev,
                     related_repos_relpath, related_peg_rev,
                     ctx, conflict->pool, scratch_pool));
           if (deleted_rev == SVN_INVALID_REVNUM)