r1892118 | stsp | 2021-08-08 20:26:28 +0000 (Sun, 08 Aug 2021) Fix a NULL pointer dereference in the conflict resolver. * subversion/libsvn_client/conflicts.c (conflict_tree_get_details_local_missing): The find_related_node() helper may return a NULL related_repo_relpath in some cases. Ensure that this will not clobber the related_repo_relpath we already calculated and bail out early in case we do end up with a NULL pointer. Reported by: Joshua Kordani (jkordani {AT} roboticresearch dot com) on users@ with a patch included in the report. Joshua kindly tested my alternative fix for this issue and confirmed that it works as expected.
r1892470 | stsp | 2021-08-20 12:29:19 +0000 (Fri, 20 Aug 2021) Add a regression test for an assertion failure in the conflict resolver. With tree conflicts involving a "local missing" node the node type recorded in wc_db may be 'none'. The resolver attempts to resolve node types with a token map which does not support the 'none' type. This results in a failing assertion in libsvn_subr/token.c. * subversion/tests/cmdline/merge_tree_conflict_tests.py (merge_local_missing_node_kind_none): New test, based on a bash script provided by Joshua Kordani which reproduced the bug. (test_list): Add new test. Reported by: Joshua Kordani (jkordani {AT} roboticresearch dot com)
r1892471 | stsp | 2021-08-20 12:39:20 +0000 (Fri, 20 Aug 2021) Fix an assertion failure triggered by the conflict resolver. The resolver may need to deal with nodes of type 'none' but was using a token map which does not support the 'none' type. Switch to a token map which supports the 'none' type. This makes the regression test added in r1892470 pass. The above fix uncovered a different problem where the wc_move_targets pointer in conflict details for a "local missing" node was left as NULL. The assumption throughout the resolver is that this variable is initialized to an empty array instead. Do this to avoid a NULL-deref which would otherwise be triggered by the same regression test. * subversion/libsvn_client/conflicts.c (conflict_tree_get_details_local_missing): Always initialize the details->wc_move_targets variable. * subversion/libsvn_wc/wc_db.c (svn_wc__db_find_working_nodes_with_basename, svn_wc__db_find_copies_of_repos_path): Use kind_map_none instead of the regular kind_map which doesn't support the 'none' type. * subversion/tests/cmdline/merge_tree_conflict_tests.py (merge_local_missing_node_kind_none): Remove XFail marker. Reported by: Joshua Kordani (jkordani {AT} roboticresearch dot com)