diff --git a/src/selectors.hh b/src/selectors.hh
index 442a93c8..f718cbd3 100644
--- a/src/selectors.hh
+++ b/src/selectors.hh
@@ -239,13 +239,12 @@ inline bool find_last_match(const Buffer& buffer, const BufferIterator& pos,
const bool is_pos_eol = is_eol(buffer, pos.coord());
const bool is_pos_eow = is_eow(buffer, pos.coord());
auto begin = buffer.begin();
- while (regex_search(begin, pos, matches, regex,
- match_flags(is_bol(begin.coord()), is_pos_eol, is_pos_eow)))
+ while (begin != pos and regex_search(begin, pos, matches, regex,
+ match_flags(is_bol(begin.coord()), is_pos_eol, is_pos_eow)))
{
- if (begin == matches[0].second)
- break;
- begin = matches[0].second;
- res.swap(matches);
+ begin = utf8::next(matches[0].first, pos);
+ if (res.empty() or matches[0].second > res[0].second)
+ res.swap(matches);
}
return not res.empty();
}
diff --git a/test/unit/search-reverse-rightmost/missed-match/cmd b/test/unit/search-reverse-rightmost/missed-match/cmd
new file mode 100644
index 00000000..2e666042
--- /dev/null
+++ b/test/unit/search-reverse-rightmost/missed-match/cmd
@@ -0,0 +1 @@
+(ab|baba)
diff --git a/test/unit/search-reverse-rightmost/missed-match/in b/test/unit/search-reverse-rightmost/missed-match/in
new file mode 100644
index 00000000..88a28c1f
--- /dev/null
+++ b/test/unit/search-reverse-rightmost/missed-match/in
@@ -0,0 +1 @@
+ababa%(b)
diff --git a/test/unit/search-reverse-rightmost/missed-match/selections b/test/unit/search-reverse-rightmost/missed-match/selections
new file mode 100644
index 00000000..0e46b314
--- /dev/null
+++ b/test/unit/search-reverse-rightmost/missed-match/selections
@@ -0,0 +1 @@
+baba
diff --git a/test/unit/search-reverse-rightmost/overlap/cmd b/test/unit/search-reverse-rightmost/overlap/cmd
new file mode 100644
index 00000000..d9568408
--- /dev/null
+++ b/test/unit/search-reverse-rightmost/overlap/cmd
@@ -0,0 +1 @@
+...
diff --git a/test/unit/search-reverse-rightmost/overlap/in b/test/unit/search-reverse-rightmost/overlap/in
new file mode 100644
index 00000000..c4144a07
--- /dev/null
+++ b/test/unit/search-reverse-rightmost/overlap/in
@@ -0,0 +1 @@
+abcdefg%(h)
diff --git a/test/unit/search-reverse-rightmost/overlap/selections b/test/unit/search-reverse-rightmost/overlap/selections
new file mode 100644
index 00000000..1505b408
--- /dev/null
+++ b/test/unit/search-reverse-rightmost/overlap/selections
@@ -0,0 +1 @@
+efg