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
category name must start with "qt."
*/
void QLoggingRegistry::registerEnvironmentOverrideForCategory(QByteArrayView categoryName,
QByteArrayView environment)
void QLoggingRegistry::registerEnvironmentOverrideForCategory(const char *categoryName,
const char *environment)
{
qtCategoryEnvironmentOverrides.insert(categoryName, environment);
}
@ -442,7 +442,7 @@ void QLoggingRegistry::defaultCategoryFilter(QLoggingCategory *cat)
if (it == reg->qtCategoryEnvironmentOverrides.end())
debug = false;
else
debug = qEnvironmentVariableIntValue(it.value().data());
debug = qEnvironmentVariableIntValue(it.value());
}
}

View File

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