From: Jean-Marc Lasgouttes Date: Sun, 23 Jan 2022 18:34:11 +0000 (+0100) Subject: brkstr2str_pos: avoid case where length is negative X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=ec3a44fef59129ba4492ddf30de81fa329e631d5;p=features.git brkstr2str_pos: avoid case where length is negative The string that Qt sees is not the original string, since we add zero-width nonbreaking spaces around it, plus an override character to force rendering direction. This means that translating positions between these two representation can be a bit tricky. We use a max(foo, 0) here to make sure that our intermediate computation is postive. Fixes part of bug #12452. --- diff --git a/src/frontends/qt/GuiFontMetrics.cpp b/src/frontends/qt/GuiFontMetrics.cpp index d827f2f9b8..e7f61c6b55 100644 --- a/src/frontends/qt/GuiFontMetrics.cpp +++ b/src/frontends/qt/GuiFontMetrics.cpp @@ -535,7 +535,7 @@ docstring::size_type brkstr2str_pos(QString brkstr, docstring const & str, int p */ // The variable `brkStrOffset' is here to account for the extra leading characters. // The ending character zerow_nbsp has to be ignored if the line is complete. - int const qlen = pos - brkStrOffset - (pos == brkstr.length()); + int const qlen = max(pos - brkStrOffset - (pos == brkstr.length()), 0); #if QT_VERSION < 0x040801 || QT_VERSION >= 0x050100 auto const len = qstring_to_ucs4(brkstr.mid(brkStrOffset, qlen)).length(); // Avoid warning