Author: svn-role
Date: Wed Jul 8 04:00:41 2026
New Revision: 1935991
Log:
Merge the r1934787 group from trunk:
* r1934787, r1934811
Fix potential use of uninitialized memory in the conflict resolver.
Justification:
Subversion should try to not crash.
Votes:
+1: brane, ivan, kotkov
Modified:
subversion/branches/1.15.x/ (props changed)
subversion/branches/1.15.x/STATUS
subversion/branches/1.15.x/subversion/libsvn_client/conflicts.c
Modified: subversion/branches/1.15.x/STATUS
==============================================================================
--- subversion/branches/1.15.x/STATUS Wed Jul 8 04:00:32 2026
(r1935990)
+++ subversion/branches/1.15.x/STATUS Wed Jul 8 04:00:41 2026
(r1935991)
@@ -66,10 +66,3 @@ Veto-blocked changes:
Approved changes:
=================
-
- * r1934787, r1934811
- Fix potential use of uninitialized memory in the conflict resolver.
- Justification:
- Subversion should try to not crash.
- Votes:
- +1: brane, ivan, kotkov
Modified: subversion/branches/1.15.x/subversion/libsvn_client/conflicts.c
==============================================================================
--- subversion/branches/1.15.x/subversion/libsvn_client/conflicts.c Wed Jul
8 04:00:32 2026 (r1935990)
+++ subversion/branches/1.15.x/subversion/libsvn_client/conflicts.c Wed Jul
8 04:00:41 2026 (r1935991)
@@ -40,6 +40,7 @@
#include "svn_subst.h"
#include "client.h"
+#include "private/svn_debug.h"
#include "private/svn_diff_tree.h"
#include "private/svn_ra_private.h"
#include "private/svn_sorts_private.h"
@@ -4862,7 +4863,7 @@ conflict_tree_get_description_incoming_d
new_repos_relpath, new_rev, result_pool);
}
- }
+ }
else if (conflict_operation == svn_wc_operation_merge)
{
if (details->deleted_rev != SVN_INVALID_REVNUM)
@@ -4883,7 +4884,14 @@ conflict_tree_get_description_incoming_d
details, victim_node_kind, old_repos_relpath, old_rev,
new_repos_relpath, new_rev, result_pool);
}
- }
+ }
+ else
+ {
+#ifdef SVN_DEBUG
+ SVN_DBG(("unknown conflict operation: %d", (int)conflict_operation));
+#endif
+ SVN_ERR_MALFUNCTION();
+ }
*incoming_change_description = apr_pstrdup(result_pool, action);
@@ -5838,6 +5846,13 @@ conflict_tree_get_description_incoming_a
details, new_node_kind, old_repos_relpath,
old_rev, new_rev, result_pool);
}
+ else
+ {
+#ifdef SVN_DEBUG
+ SVN_DBG(("unknown conflict operation: %d", (int)conflict_operation));
+#endif
+ SVN_ERR_MALFUNCTION();
+ }
*incoming_change_description = apr_pstrdup(result_pool, action);
@@ -5984,7 +5999,7 @@ conflict_tree_get_details_incoming_edit(
svn_revnum_t new_rev;
svn_node_kind_t old_node_kind;
svn_node_kind_t new_node_kind;
- svn_wc_operation_t operation;
+ svn_wc_operation_t conflict_operation;
const char *url;
const char *corrected_url;
svn_ra_session_t *ra_session;
@@ -6001,8 +6016,8 @@ conflict_tree_get_details_incoming_edit(
SVN_ERR(svn_client_conflict_get_repos_info(&repos_root_url, NULL,
conflict,
scratch_pool, scratch_pool));
- operation = svn_client_conflict_get_operation(conflict);
- if (operation == svn_wc_operation_update)
+ conflict_operation = svn_client_conflict_get_operation(conflict);
+ if (conflict_operation == svn_wc_operation_update)
{
b.node_kind = old_rev < new_rev ? new_node_kind : old_node_kind;
@@ -6018,8 +6033,8 @@ conflict_tree_get_details_incoming_edit(
b.repos_relpath = old_rev < new_rev ? new_repos_relpath
: old_repos_relpath;
}
- else if (operation == svn_wc_operation_switch ||
- operation == svn_wc_operation_merge)
+ else if (conflict_operation == svn_wc_operation_switch ||
+ conflict_operation == svn_wc_operation_merge)
{
url = svn_path_url_add_component2(repos_root_url, new_repos_relpath,
scratch_pool);
@@ -6027,6 +6042,13 @@ conflict_tree_get_details_incoming_edit(
b.repos_relpath = new_repos_relpath;
b.node_kind = new_node_kind;
}
+ else
+ {
+#ifdef SVN_DEBUG
+ SVN_DBG(("unknown conflict operation: %d", (int)conflict_operation));
+#endif
+ SVN_ERR_MALFUNCTION();
+ }
SVN_ERR(svn_client__open_ra_session_internal(&ra_session,
&corrected_url,
@@ -6363,6 +6385,13 @@ conflict_tree_get_description_incoming_e
}
}
}
+ else
+ {
+#ifdef SVN_DEBUG
+ SVN_DBG(("unknown conflict operation: %d", (int)conflict_operation));
+#endif
+ SVN_ERR_MALFUNCTION();
+ }
action = apr_psprintf(scratch_pool, "%s:\n%s", action,
describe_incoming_edit_list_modified_revs(