Let QLoggingCategory::defaultCategory return a pointer
The pointer can be null. Going trough the reference invokes undefined behavior here. Change-Id: Ia84e4e732cdcbbaee0f5f0679765d18069ea8b2d Reviewed-by: Kai Koehne <kai.koehne@digia.com>
This commit is contained in:
parent
f9889534d1
commit
7a47aebe9e
@ -927,7 +927,7 @@ static void qt_message_print(QtMsgType msgType, const QMessageLogContext &contex
|
|||||||
#ifndef QT_BOOTSTRAPPED
|
#ifndef QT_BOOTSTRAPPED
|
||||||
// qDebug, qWarning, ... macros do not check whether category is enabled
|
// qDebug, qWarning, ... macros do not check whether category is enabled
|
||||||
if (!context.category || (strcmp(context.category, "default") == 0)) {
|
if (!context.category || (strcmp(context.category, "default") == 0)) {
|
||||||
if (QLoggingCategory *defaultCategory = &QLoggingCategory::defaultCategory()) {
|
if (QLoggingCategory *defaultCategory = QLoggingCategory::defaultCategory()) {
|
||||||
if (!defaultCategory->isEnabled(msgType))
|
if (!defaultCategory->isEnabled(msgType))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -244,12 +244,19 @@ void QLoggingCategory::setEnabled(QtMsgType type, bool enable)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Returns the category \c "default" that is used e.g. by qDebug(), qWarning(),
|
Returns a pointer to the global category \c "default" that
|
||||||
qCritical(), qFatal().
|
is used e.g. by qDebug(), qWarning(), qCritical(), qFatal().
|
||||||
|
|
||||||
|
\note The returned pointer may be null during destruction of
|
||||||
|
static objects.
|
||||||
|
|
||||||
|
\note Ownership of the category is not transferred, do not
|
||||||
|
\c delete the returned pointer.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
QLoggingCategory &QLoggingCategory::defaultCategory()
|
QLoggingCategory *QLoggingCategory::defaultCategory()
|
||||||
{
|
{
|
||||||
return *qtDefaultCategory();
|
return qtDefaultCategory();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -72,7 +72,7 @@ public:
|
|||||||
// allows usage of both factory method and variable in qCX macros
|
// allows usage of both factory method and variable in qCX macros
|
||||||
QLoggingCategory &operator()() { return *this; }
|
QLoggingCategory &operator()() { return *this; }
|
||||||
|
|
||||||
static QLoggingCategory &defaultCategory();
|
static QLoggingCategory *defaultCategory();
|
||||||
|
|
||||||
typedef void (*CategoryFilter)(QLoggingCategory*);
|
typedef void (*CategoryFilter)(QLoggingCategory*);
|
||||||
static CategoryFilter installFilter(CategoryFilter);
|
static CategoryFilter installFilter(CategoryFilter);
|
||||||
|
@ -226,7 +226,7 @@ private slots:
|
|||||||
void QLoggingCategory_categoryName()
|
void QLoggingCategory_categoryName()
|
||||||
{
|
{
|
||||||
logMessage.clear();
|
logMessage.clear();
|
||||||
QCOMPARE(QString::fromLatin1(QLoggingCategory::defaultCategory().categoryName()),
|
QCOMPARE(QString::fromLatin1(QLoggingCategory::defaultCategory()->categoryName()),
|
||||||
QStringLiteral("default"));
|
QStringLiteral("default"));
|
||||||
|
|
||||||
QLoggingCategory defaultCategory("default");
|
QLoggingCategory defaultCategory("default");
|
||||||
@ -237,7 +237,7 @@ private slots:
|
|||||||
QCOMPARE(QByteArray(nullCategory.categoryName()), QByteArray("default"));
|
QCOMPARE(QByteArray(nullCategory.categoryName()), QByteArray("default"));
|
||||||
|
|
||||||
// we rely on the same pointer for any "default" category
|
// we rely on the same pointer for any "default" category
|
||||||
QCOMPARE(QLoggingCategory::defaultCategory().categoryName(),
|
QCOMPARE(QLoggingCategory::defaultCategory()->categoryName(),
|
||||||
defaultCategory.categoryName());
|
defaultCategory.categoryName());
|
||||||
QCOMPARE(defaultCategory.categoryName(),
|
QCOMPARE(defaultCategory.categoryName(),
|
||||||
nullCategory.categoryName());
|
nullCategory.categoryName());
|
||||||
@ -256,12 +256,12 @@ private slots:
|
|||||||
{
|
{
|
||||||
logMessage.clear();
|
logMessage.clear();
|
||||||
|
|
||||||
QCOMPARE(QLoggingCategory::defaultCategory().isDebugEnabled(), true);
|
QCOMPARE(QLoggingCategory::defaultCategory()->isDebugEnabled(), true);
|
||||||
QCOMPARE(QLoggingCategory::defaultCategory().isEnabled(QtDebugMsg), true);
|
QCOMPARE(QLoggingCategory::defaultCategory()->isEnabled(QtDebugMsg), true);
|
||||||
QCOMPARE(QLoggingCategory::defaultCategory().isWarningEnabled(), true);
|
QCOMPARE(QLoggingCategory::defaultCategory()->isWarningEnabled(), true);
|
||||||
QCOMPARE(QLoggingCategory::defaultCategory().isEnabled(QtWarningMsg), true);
|
QCOMPARE(QLoggingCategory::defaultCategory()->isEnabled(QtWarningMsg), true);
|
||||||
QCOMPARE(QLoggingCategory::defaultCategory().isCriticalEnabled(), true);
|
QCOMPARE(QLoggingCategory::defaultCategory()->isCriticalEnabled(), true);
|
||||||
QCOMPARE(QLoggingCategory::defaultCategory().isEnabled(QtCriticalMsg), true);
|
QCOMPARE(QLoggingCategory::defaultCategory()->isEnabled(QtCriticalMsg), true);
|
||||||
|
|
||||||
QLoggingCategory defaultCategory("default");
|
QLoggingCategory defaultCategory("default");
|
||||||
QCOMPARE(defaultCategory.isDebugEnabled(), true);
|
QCOMPARE(defaultCategory.isDebugEnabled(), true);
|
||||||
@ -287,11 +287,11 @@ private slots:
|
|||||||
{
|
{
|
||||||
logMessage.clear();
|
logMessage.clear();
|
||||||
|
|
||||||
QCOMPARE(QLoggingCategory::defaultCategory().isDebugEnabled(), true);
|
QCOMPARE(QLoggingCategory::defaultCategory()->isDebugEnabled(), true);
|
||||||
|
|
||||||
QLoggingCategory::defaultCategory().setEnabled(QtDebugMsg, false);
|
QLoggingCategory::defaultCategory()->setEnabled(QtDebugMsg, false);
|
||||||
QCOMPARE(QLoggingCategory::defaultCategory().isDebugEnabled(), false);
|
QCOMPARE(QLoggingCategory::defaultCategory()->isDebugEnabled(), false);
|
||||||
QLoggingCategory::defaultCategory().setEnabled(QtDebugMsg, true);
|
QLoggingCategory::defaultCategory()->setEnabled(QtDebugMsg, true);
|
||||||
|
|
||||||
// make sure nothing has printed warnings
|
// make sure nothing has printed warnings
|
||||||
QVERIFY(logMessage.isEmpty());
|
QVERIFY(logMessage.isEmpty());
|
||||||
@ -300,13 +300,13 @@ private slots:
|
|||||||
|
|
||||||
void QLoggingCategory_installFilter()
|
void QLoggingCategory_installFilter()
|
||||||
{
|
{
|
||||||
QVERIFY(QLoggingCategory::defaultCategory().isDebugEnabled());
|
QVERIFY(QLoggingCategory::defaultCategory()->isDebugEnabled());
|
||||||
|
|
||||||
QLoggingCategory::CategoryFilter defaultFilter =
|
QLoggingCategory::CategoryFilter defaultFilter =
|
||||||
QLoggingCategory::installFilter(customCategoryFilter);
|
QLoggingCategory::installFilter(customCategoryFilter);
|
||||||
QVERIFY(defaultFilter);
|
QVERIFY(defaultFilter);
|
||||||
customCategoryFilterArgs.clear();
|
customCategoryFilterArgs.clear();
|
||||||
QVERIFY(!QLoggingCategory::defaultCategory().isDebugEnabled());
|
QVERIFY(!QLoggingCategory::defaultCategory()->isDebugEnabled());
|
||||||
|
|
||||||
QLoggingCategory cat("custom");
|
QLoggingCategory cat("custom");
|
||||||
QCOMPARE(customCategoryFilterArgs, QStringList() << "custom");
|
QCOMPARE(customCategoryFilterArgs, QStringList() << "custom");
|
||||||
@ -319,7 +319,7 @@ private slots:
|
|||||||
QCOMPARE((void*)currentFilter, (void*)customCategoryFilter);
|
QCOMPARE((void*)currentFilter, (void*)customCategoryFilter);
|
||||||
QCOMPARE(customCategoryFilterArgs.size(), 0);
|
QCOMPARE(customCategoryFilterArgs.size(), 0);
|
||||||
|
|
||||||
QVERIFY(QLoggingCategory::defaultCategory().isDebugEnabled());
|
QVERIFY(QLoggingCategory::defaultCategory()->isDebugEnabled());
|
||||||
QVERIFY(!cat.isDebugEnabled());
|
QVERIFY(!cat.isDebugEnabled());
|
||||||
|
|
||||||
// install default filter
|
// install default filter
|
||||||
@ -328,7 +328,7 @@ private slots:
|
|||||||
QCOMPARE((void*)defaultFilter, (void*)currentFilter);
|
QCOMPARE((void*)defaultFilter, (void*)currentFilter);
|
||||||
QCOMPARE(customCategoryFilterArgs.size(), 0);
|
QCOMPARE(customCategoryFilterArgs.size(), 0);
|
||||||
|
|
||||||
QVERIFY(QLoggingCategory::defaultCategory().isDebugEnabled());
|
QVERIFY(QLoggingCategory::defaultCategory()->isDebugEnabled());
|
||||||
QVERIFY(!cat.isDebugEnabled());
|
QVERIFY(!cat.isDebugEnabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user