]> git.lyx.org Git - features.git/commitdiff
brkstr2str_pos: avoid case where length is negative
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Sun, 23 Jan 2022 18:34:11 +0000 (19:34 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Sun, 23 Jan 2022 18:34:11 +0000 (19:34 +0100)
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.

src/frontends/qt/GuiFontMetrics.cpp

index d827f2f9b894adac5205ab03b134dfe6073e4a62..e7f61c6b556b96b5c2e334b1b793e66328a9ee31 100644 (file)
@@ -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