From f18d24efaadf06348f7d930b0a1833487d94d5ac Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 18 Sep 2020 10:53:23 +0200 Subject: [PATCH] Fix crash after move to QStringView MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With Qt 5. Fix the bounds checking for midView by copying the complete logic from Qt QContainerImplHelper::mid. Fixes: QDS-2806 Task-number: QTCREATORBUG-24098 Change-Id: I0d7d414c159f81a76114b67f55aefbb81f17b034 Reviewed-by: Henning Gründl Reviewed-by: hjk --- src/libs/utils/porting.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/libs/utils/porting.h b/src/libs/utils/porting.h index 74d96795970..5b74464ac80 100644 --- a/src/libs/utils/porting.h +++ b/src/libs/utils/porting.h @@ -66,9 +66,16 @@ inline StringView make_stringview(const QString &s) inline QStringView midView(const QString &s, int offset, int length) { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - if (offset > s.size()) + const int size = s.size(); + if (offset > size) return {}; - if (offset + length > s.size()) + if (offset < 0) { + if (length < 0 || length + offset >= size) + return QStringView(s); + if (length + offset <= 0) + return {}; + return QStringView(s).left(length + offset); + } else if (length > size - offset) return QStringView(s).mid(offset); return QStringView(s).mid(offset, length); #else