From 9c5117756419480eb83e6484cee6ad2f01358df7 Mon Sep 17 00:00:00 2001 From: Andrei Golubev Date: Wed, 11 Nov 2020 09:33:31 +0100 Subject: [PATCH] QStringBuilder: change int to qsizetype We should use qsizetype when interacting with QString/QBA to avoid subtle overflow bugs and int limitations Change-Id: I4ae5ea98a72c6283c7dca0ecfa94cc1669c9b446 Reviewed-by: Lars Knoll --- src/corelib/text/qstringbuilder.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/corelib/text/qstringbuilder.h b/src/corelib/text/qstringbuilder.h index 7d35a04762..ec5ef6eb7c 100644 --- a/src/corelib/text/qstringbuilder.h +++ b/src/corelib/text/qstringbuilder.h @@ -108,7 +108,7 @@ private: friend class QString; template T convertTo() const { - const uint len = QConcatenable< QStringBuilder >::size(*this); + const qsizetype len = QConcatenable< QStringBuilder >::size(*this); T s(len, Qt::Uninitialized); // we abuse const_cast / constData here because we know we've just @@ -117,10 +117,10 @@ private: typename T::const_iterator const start = d; QConcatenable< QStringBuilder >::appendTo(*this, d); - if (!QConcatenable< QStringBuilder >::ExactSize && int(len) != d - start) { + if (!QConcatenable< QStringBuilder >::ExactSize && len != d - start) { // this resize is necessary since we allocate a bit too much // when dealing with variable sized 8-bit encodings - s.resize(int(d - start)); + s.resize(d - start); } return s; } @@ -257,7 +257,7 @@ template <> struct QConcatenable : private QAbstractConcatenable static qsizetype size(const QString &a) { return a.size(); } static inline void appendTo(const QString &a, QChar *&out) { - const int n = a.size(); + const qsizetype n = a.size(); if (n) memcpy(out, reinterpret_cast(a.constData()), sizeof(QChar) * n); out += n; @@ -279,7 +279,7 @@ template <> struct QConcatenable : private QAbstractConcatenable } }; -template struct QConcatenable : private QAbstractConcatenable +template struct QConcatenable : private QAbstractConcatenable { typedef const char type[N]; typedef QByteArray ConvertTo; @@ -298,7 +298,7 @@ template struct QConcatenable : private QAbstractConcaten } }; -template struct QConcatenable : QConcatenable +template struct QConcatenable : QConcatenable { typedef char type[N]; }; @@ -327,7 +327,7 @@ template <> struct QConcatenable : QConcatenable typedef char *type; }; -template struct QConcatenable : private QAbstractConcatenable +template struct QConcatenable : private QAbstractConcatenable { using type = const char16_t[N]; using ConvertTo = QString; @@ -340,7 +340,7 @@ template struct QConcatenable : private QAbstractConc } }; -template struct QConcatenable : QConcatenable +template struct QConcatenable : QConcatenable { using type = char16_t[N]; }; @@ -427,7 +427,7 @@ template QByteArray &appendToByteArray(QByteArray &a, const QStringBuilder &b, char) { // append 8-bit data to a byte array - int len = a.size() + QConcatenable< QStringBuilder >::size(b); + qsizetype len = a.size() + QConcatenable< QStringBuilder >::size(b); a.reserve(len); char *it = a.data() + a.size(); QConcatenable< QStringBuilder >::appendTo(b, it); @@ -454,11 +454,11 @@ QByteArray &operator+=(QByteArray &a, const QStringBuilder &b) template QString &operator+=(QString &a, const QStringBuilder &b) { - int len = a.size() + QConcatenable< QStringBuilder >::size(b); + qsizetype len = a.size() + QConcatenable< QStringBuilder >::size(b); a.reserve(len); QChar *it = a.data() + a.size(); QConcatenable< QStringBuilder >::appendTo(b, it); - a.resize(int(it - a.constData())); //may be smaller than len if there was conversion from utf8 + a.resize(it - a.constData()); //may be smaller than len if there was conversion from utf8 return a; }