summaryrefslogtreecommitdiffstats
path: root/src/corelib/text/qstringconverter.cpp
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2022-02-18 18:13:08 +0100
committerMarc Mutz <marc.mutz@qt.io>2022-02-20 00:58:52 +0000
commit955106c4fbc3769c646beb99ed91dadff14ec2d2 (patch)
tree12fbee4f63c281869e8e72a31f362c3a448356f8 /src/corelib/text/qstringconverter.cpp
parentb2298b7e940eccdd3af22855b8d4fce0d8049ca2 (diff)
QStringConverter: make name matching locale-independent
The existing name lookup code used C's toupper() function for case-insensitive comparison. However, that function's result depends on the current locale. Since the matcher is supposed to match the likes of "iso-8859-1" and "latin-1", matching may fail in locales, such as Turkish, where toupper(i) is İ (or i, if the former isn't representable in the current charset), but toupper(I) remains I, causing a False Negative. To fix, use the US-ASCII-only QtMiscUtils::toAsciiLower() function, which has the added advantage that it's inline. Pick-to: 6.3 6.2 Change-Id: I70613c0167d84e3dc3d282c61c716b5dd0b3e6bb Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/text/qstringconverter.cpp')
-rw-r--r--src/corelib/text/qstringconverter.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/corelib/text/qstringconverter.cpp b/src/corelib/text/qstringconverter.cpp
index 83cbc3095a..e6c2552348 100644
--- a/src/corelib/text/qstringconverter.cpp
+++ b/src/corelib/text/qstringconverter.cpp
@@ -44,6 +44,7 @@
#include "private/qsimd_p.h"
#include "private/qstringiterator_p.h"
+#include "private/qtools_p.h"
#include "qbytearraymatcher.h"
#ifdef Q_OS_WIN
@@ -1671,7 +1672,7 @@ static bool nameMatch(const char *a, const char *b)
++b;
continue;
}
- if (toupper(*a) != toupper(*b))
+ if (QtMiscUtils::toAsciiLower(*a) != QtMiscUtils::toAsciiLower(*b))
return false;
++a;
++b;