summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2022-07-18 17:20:04 +0200
committerMarc Mutz <marc.mutz@qt.io>2022-07-20 13:15:57 +0200
commitd6b38be3dfa4579cbe99cc442452a45779a71e70 (patch)
treeb26b220163394c82677795411544399836c76d42 /src
parentd0aedfab0991b23aaa09746d6c9b83b8d28755c5 (diff)
Port qt_repeatCount() to qsizetype
While it's true that the typical user of the function won't expect more than half a dozen repeats, this function is fed with user-supplied input, so it could be asked to return in excess of INT_MAX matches. The truncation then means we're misreporting the number mod INT_MAX, which is as good as a random number and leads to false positive matches in users of the function. Just return the true result instead of a truncated one. Pick-to: 6.4 6.3 6.2 Task-number: QTBUG-103531 Change-Id: I5e3aa23dec873c6f9af255e90748fb38619d2f5d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/text/qlocale.cpp6
-rw-r--r--src/corelib/text/qlocale_mac.mm2
-rw-r--r--src/corelib/text/qlocale_p.h2
-rw-r--r--src/corelib/text/qlocale_win.cpp2
4 files changed, 6 insertions, 6 deletions
diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp
index 536c5c3be5..85df96c7d8 100644
--- a/src/corelib/text/qlocale.cpp
+++ b/src/corelib/text/qlocale.cpp
@@ -668,7 +668,7 @@ QString qt_readEscapedFormatString(QStringView format, int *idx)
qt_repeatCount(u"aab"); // == 2
\endcode
*/
-int qt_repeatCount(QStringView s)
+qsizetype qt_repeatCount(QStringView s)
{
if (s.isEmpty())
return 0;
@@ -676,7 +676,7 @@ int qt_repeatCount(QStringView s)
qsizetype j = 1;
while (j < s.size() && s.at(j) == c)
++j;
- return int(j);
+ return j;
}
Q_CONSTINIT static const QLocaleData *default_data = nullptr;
@@ -3333,7 +3333,7 @@ QString QCalendarBackend::dateTimeToString(QStringView format, const QDateTime &
}
const QChar c = format.at(i);
- int repeat = qt_repeatCount(format.mid(i));
+ qsizetype repeat = qt_repeatCount(format.mid(i));
bool used = false;
if (formatDate) {
switch (c.unicode()) {
diff --git a/src/corelib/text/qlocale_mac.mm b/src/corelib/text/qlocale_mac.mm
index 67f8039309..7ed7c34f3b 100644
--- a/src/corelib/text/qlocale_mac.mm
+++ b/src/corelib/text/qlocale_mac.mm
@@ -267,7 +267,7 @@ static QVariant macToQtFormat(QStringView sys_fmt)
}
QChar c = sys_fmt.at(i);
- int repeat = qt_repeatCount(sys_fmt.mid(i));
+ qsizetype repeat = qt_repeatCount(sys_fmt.mid(i));
switch (c.unicode()) {
// Qt does not support the following options
diff --git a/src/corelib/text/qlocale_p.h b/src/corelib/text/qlocale_p.h
index e00b3c78bd..a2a48b9290 100644
--- a/src/corelib/text/qlocale_p.h
+++ b/src/corelib/text/qlocale_p.h
@@ -479,7 +479,7 @@ inline char QLocaleData::numericToCLocale(QStringView in) const
QString qt_readEscapedFormatString(QStringView format, int *idx);
[[nodiscard]] bool qt_splitLocaleName(QStringView name, QStringView *lang = nullptr,
QStringView *script = nullptr, QStringView *cntry = nullptr);
-[[nodiscard]] int qt_repeatCount(QStringView s);
+[[nodiscard]] qsizetype qt_repeatCount(QStringView s);
enum { AsciiSpaceMask = (1u << (' ' - 1)) |
(1u << ('\t' - 1)) | // 9: HT - horizontal tab
diff --git a/src/corelib/text/qlocale_win.cpp b/src/corelib/text/qlocale_win.cpp
index f97d910451..f67965539b 100644
--- a/src/corelib/text/qlocale_win.cpp
+++ b/src/corelib/text/qlocale_win.cpp
@@ -729,7 +729,7 @@ QString QSystemLocalePrivate::winToQtFormat(QStringView sys_fmt)
}
QChar c = sys_fmt.at(i);
- int repeat = qt_repeatCount(sys_fmt.mid(i));
+ qsizetype repeat = qt_repeatCount(sys_fmt.mid(i));
switch (c.unicode()) {
// Date