diff --git a/src/libs/utils/mimetypes2/mimemagicrule.cpp b/src/libs/utils/mimetypes2/mimemagicrule.cpp index fc69a9ec9b0..5db88c2f717 100644 --- a/src/libs/utils/mimetypes2/mimemagicrule.cpp +++ b/src/libs/utils/mimetypes2/mimemagicrule.cpp @@ -40,8 +40,11 @@ #include "mimemagicrule_p.h" #include "mimetypeparser_p.h" -#include + +#include "porting.h" + #include +#include #include namespace Utils { @@ -260,8 +263,11 @@ MimeMagicRule::MimeMagicRule(const QString &type, // Parse for offset as "1" or "1:10" const int colonIndex = offsets.indexOf(QLatin1Char(':')); - const QStringView startPosStr = QStringView{offsets}.mid(0, colonIndex); // \ These decay to returning 'offsets' - const QStringView endPosStr = QStringView{offsets}.mid(colonIndex + 1);// / unchanged when colonIndex == -1 + const QStringView startPosStr + = Utils::midView(offsets, 0, colonIndex); // \ These decay to returning 'offsets' + const QStringView endPosStr = Utils::midView(offsets, + colonIndex + + 1); // / unchanged when colonIndex == -1 if (Q_UNLIKELY(!MimeTypeParserBase::parseNumber(startPosStr, &m_startPos, errorString)) || Q_UNLIKELY(!MimeTypeParserBase::parseNumber(endPosStr, &m_endPos, errorString))) { m_type = Invalid; diff --git a/src/libs/utils/porting.h b/src/libs/utils/porting.h index c84ea60dfb4..8b13e366180 100644 --- a/src/libs/utils/porting.h +++ b/src/libs/utils/porting.h @@ -65,7 +65,7 @@ inline StringView make_stringview(const QString &s) } // QStringView::mid in Qt5 does not do bounds checking, in Qt6 it does -inline QStringView midView(const QString &s, int offset, int length) +inline QStringView midView(const QString &s, int offset, int length = -1) { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) const int size = s.size(); @@ -77,7 +77,7 @@ inline QStringView midView(const QString &s, int offset, int length) if (length + offset <= 0) return {}; return QStringView(s).left(length + offset); - } else if (length > size - offset) + } else if (length < 0 || length > size - offset) return QStringView(s).mid(offset); return QStringView(s).mid(offset, length); #else