QLoggingRegistry: further defend against non-NUL-terminated strings

Various functions in QLoggingRegistry took QByteArrayView, but they
continued to assume that the data was NUL-terminated (converting back
to const char* by calling data()).

Make sure only NUL-terminated strings are passed by taking in the
tranditional way, as const char*. Keep QByteArrayView when storing in
the map as key, to avoid comparing just pointer values (as opposed to
the string content).

Amends 806545fcc8d6b3b96a5191a00a31e9a39837189c.

Pick-to: 6.6 6.5
Change-Id: I232167d4c91070369e770c41d3ea53bd2406a03f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit 6b59ff573028eabba42ca63ce50ce05fa160ecaf)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Marc Mutz 2024-02-08 14:25:24 +01:00 committed by Qt Cherry-pick Bot
parent 27291b97b4
commit 1bba8b894a
2 changed files with 7 additions and 7 deletions

View File

@ -347,8 +347,8 @@ void QLoggingRegistry::unregisterCategory(QLoggingCategory *cat)
for enabling debugging by default for category \a categoryName. The for enabling debugging by default for category \a categoryName. The
category name must start with "qt." category name must start with "qt."
*/ */
void QLoggingRegistry::registerEnvironmentOverrideForCategory(QByteArrayView categoryName, void QLoggingRegistry::registerEnvironmentOverrideForCategory(const char *categoryName,
QByteArrayView environment) const char *environment)
{ {
qtCategoryEnvironmentOverrides.insert(categoryName, environment); qtCategoryEnvironmentOverrides.insert(categoryName, environment);
} }
@ -442,7 +442,7 @@ void QLoggingRegistry::defaultCategoryFilter(QLoggingCategory *cat)
if (it == reg->qtCategoryEnvironmentOverrides.end()) if (it == reg->qtCategoryEnvironmentOverrides.end())
debug = false; debug = false;
else else
debug = qEnvironmentVariableIntValue(it.value().data()); debug = qEnvironmentVariableIntValue(it.value());
} }
} }

View File

@ -97,7 +97,7 @@ public:
#ifndef QT_BUILD_INTERNAL #ifndef QT_BUILD_INTERNAL
Q_CORE_EXPORT // always export from QtCore Q_CORE_EXPORT // always export from QtCore
#endif #endif
void registerEnvironmentOverrideForCategory(QByteArrayView categoryName, QByteArrayView environment); void registerEnvironmentOverrideForCategory(const char *categoryName, const char *environment);
void setApiRules(const QString &content); void setApiRules(const QString &content);
@ -127,7 +127,7 @@ private:
QList<QLoggingRule> ruleSets[NumRuleSets]; QList<QLoggingRule> ruleSets[NumRuleSets];
QHash<QLoggingCategory *, QtMsgType> categories; QHash<QLoggingCategory *, QtMsgType> categories;
QLoggingCategory::CategoryFilter categoryFilter; QLoggingCategory::CategoryFilter categoryFilter;
QMap<QByteArrayView, QByteArrayView> qtCategoryEnvironmentOverrides; QMap<QByteArrayView, const char *> qtCategoryEnvironmentOverrides;
friend class ::tst_QLoggingRegistry; friend class ::tst_QLoggingRegistry;
}; };
@ -140,12 +140,12 @@ public:
{} {}
private: private:
static const char *registerOverride(QByteArrayView categoryName, QByteArrayView environment) static const char *registerOverride(const char *categoryName, const char *environment)
{ {
QLoggingRegistry *c = QLoggingRegistry::instance(); QLoggingRegistry *c = QLoggingRegistry::instance();
if (c) if (c)
c->registerEnvironmentOverrideForCategory(categoryName, environment); c->registerEnvironmentOverrideForCategory(categoryName, environment);
return categoryName.data(); return categoryName;
} }
}; };