OSDN Git Service

pass the source text length to QString::fromUtf8() from QTranslator::translate()
authorIvailo Monev <xakepa10@gmail.com>
Sun, 27 Aug 2023 17:50:45 +0000 (20:50 +0300)
committerIvailo Monev <xakepa10@gmail.com>
Sun, 27 Aug 2023 17:50:45 +0000 (20:50 +0300)
otherwise QString::fromUtf8() will call qstrlen() to figure out the string
length

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/core/kernel/qtranslator.cpp

index 2ec4d18..f013a4f 100644 (file)
@@ -247,13 +247,13 @@ bool QTranslator::loadFromData(const QByteArray &data)
 */
 QString QTranslator::translate(const char *context, const char *sourceText) const
 {
+    const int sourcelen = qstrlen(sourceText);
     if (isEmpty()) {
-        return QString::fromUtf8(sourceText);
+        return QString::fromUtf8(sourceText, sourcelen);
     }
 
     Q_D(const QTranslator);
     const int contextlen = qstrlen(context);
-    const int sourcelen = qstrlen(sourceText);
     foreach (const QTranslatorCache &it, d->cache) {
         // this search method assumes plurals and regular messages are unique strings
         if (isCharEqual(it.trmsgctxt.constData(), it.trmsgctxt.size(), context, contextlen)
@@ -268,7 +268,7 @@ QString QTranslator::translate(const char *context, const char *sourceText) cons
             return d->converter.toUnicode(it.trmsgstr.constData(), it.trmsgstr.size());
         }
     }
-    return QString::fromUtf8(sourceText);
+    return QString::fromUtf8(sourceText, sourcelen);
 }
 
 /*!