QSignalSpy: separate messages for invalid and non-signal meta-methods
If a signal was invalid, the code still called messageSignature(), which returns a null QByteArray, and passed its constData() to qWarning("%s"). That probably worked in our implementation, because it falls back to QString::asprintf(), but it raised eyebrows, so avoid calling messageSignature() on invalid QMetaMethod. This changes the warning output, so adjust the test. Task-number: QTBUG-123544 Change-Id: I41bc6650de091f61354ff91ee45659668f0e0223 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
parent
fa5cb84069
commit
d2dbe2d7f7
@ -71,13 +71,7 @@ private:
|
|||||||
if (!isObjectValid(obj))
|
if (!isObjectValid(obj))
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
if (!signal0) {
|
return verify(obj, QMetaMethod::fromSignal(signal0));
|
||||||
qWarning("QSignalSpy: Null signal pointer is not valid");
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
const QMetaMethod signalMetaMethod = QMetaMethod::fromSignal(signal0);
|
|
||||||
return verify(obj, signalMetaMethod);
|
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
#endif // Q_QDOC
|
#endif // Q_QDOC
|
||||||
@ -157,12 +151,17 @@ private:
|
|||||||
|
|
||||||
static bool isSignalMetaMethodValid(const QMetaMethod &signal)
|
static bool isSignalMetaMethodValid(const QMetaMethod &signal)
|
||||||
{
|
{
|
||||||
const bool valid = signal.isValid() && signal.methodType() == QMetaMethod::Signal;
|
if (!signal.isValid()) {
|
||||||
|
qWarning("QSignalSpy: Null signal is not valid");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!valid)
|
if (signal.methodType() != QMetaMethod::Signal) {
|
||||||
qWarning("QSignalSpy: Not a valid signal: '%s'", signal.methodSignature().constData());
|
qWarning("QSignalSpy: Not a signal: '%s'", signal.methodSignature().constData());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return valid;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isObjectValid(const QObject *object)
|
static bool isObjectValid(const QObject *object)
|
||||||
|
@ -485,12 +485,12 @@ void tst_QSignalSpy::spyOnMetaMethod_invalid_data()
|
|||||||
<< QMetaMethod();
|
<< QMetaMethod();
|
||||||
|
|
||||||
QTest::addRow("Empty signal")
|
QTest::addRow("Empty signal")
|
||||||
<< "QSignalSpy: Not a valid signal: ''"_ba
|
<< "QSignalSpy: Null signal is not valid"_ba
|
||||||
<< new QObject(this)
|
<< new QObject(this)
|
||||||
<< QMetaMethod();
|
<< QMetaMethod();
|
||||||
|
|
||||||
QTest::addRow("Method is not a signal")
|
QTest::addRow("Method is not a signal")
|
||||||
<< "QSignalSpy: Not a valid signal: 'deleteLater()'"_ba
|
<< "QSignalSpy: Not a signal: 'deleteLater()'"_ba
|
||||||
<< new QObject(this)
|
<< new QObject(this)
|
||||||
<< QObject::staticMetaObject.method(QObject::staticMetaObject.indexOfMethod("deleteLater()"));
|
<< QObject::staticMetaObject.method(QObject::staticMetaObject.indexOfMethod("deleteLater()"));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user