From 3a4cf451062e394417630f4134738c39d28b306c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Sun, 21 Aug 2022 02:19:44 +0200 Subject: [PATCH] Fix potential self-move points --- include/boost/move/algo/detail/adaptive_sort_merge.hpp | 6 ++++-- include/boost/move/algo/detail/pdqsort.hpp | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/boost/move/algo/detail/adaptive_sort_merge.hpp b/include/boost/move/algo/detail/adaptive_sort_merge.hpp index 220c0b5..4d8675b 100644 --- a/include/boost/move/algo/detail/adaptive_sort_merge.hpp +++ b/include/boost/move/algo/detail/adaptive_sort_merge.hpp @@ -175,7 +175,8 @@ void swap_and_update_key { if(begin != with){ ::boost::adl_move_swap_ranges(begin, end, with); - ::boost::adl_move_swap(*key_next, *key_range2); + if(key_next != key_range2) //Avoid potential self-swapping + ::boost::adl_move_swap(*key_next, *key_range2); if(key_next == key_mid){ key_mid = key_range2; } @@ -217,7 +218,8 @@ RandIt2 buffer_and_update_key while(begin != end) { op(three_way_t(), begin++, with++, buffer++); } - ::boost::adl_move_swap(*key_next, *key_range2); + if (key_next != key_range2) //Avoid potential self-swapping + ::boost::adl_move_swap(*key_next, *key_range2); if (key_next == key_mid) { key_mid = key_range2; } diff --git a/include/boost/move/algo/detail/pdqsort.hpp b/include/boost/move/algo/detail/pdqsort.hpp index 640f8a3..1e92755 100644 --- a/include/boost/move/algo/detail/pdqsort.hpp +++ b/include/boost/move/algo/detail/pdqsort.hpp @@ -192,7 +192,8 @@ namespace pdqsort_detail { // Put the pivot in the right place. Iter pivot_pos = first - 1; - *begin = boost::move(*pivot_pos); + if(begin != pivot_pos) //Avoid potential self-move + *begin = boost::move(*pivot_pos); *pivot_pos = boost::move(pivot); return pdqsort_detail::pair(pivot_pos, already_partitioned);