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))
|
||||
return {};
|
||||
|
||||
if (!signal0) {
|
||||
qWarning("QSignalSpy: Null signal pointer is not valid");
|
||||
return {};
|
||||
}
|
||||
|
||||
const QMetaMethod signalMetaMethod = QMetaMethod::fromSignal(signal0);
|
||||
return verify(obj, signalMetaMethod);
|
||||
return verify(obj, QMetaMethod::fromSignal(signal0));
|
||||
}
|
||||
public:
|
||||
#endif // Q_QDOC
|
||||
@ -157,12 +151,17 @@ private:
|
||||
|
||||
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)
|
||||
qWarning("QSignalSpy: Not a valid signal: '%s'", signal.methodSignature().constData());
|
||||
if (signal.methodType() != QMetaMethod::Signal) {
|
||||
qWarning("QSignalSpy: Not a signal: '%s'", signal.methodSignature().constData());
|
||||
return false;
|
||||
}
|
||||
|
||||
return valid;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool isObjectValid(const QObject *object)
|
||||
|
@ -485,12 +485,12 @@ void tst_QSignalSpy::spyOnMetaMethod_invalid_data()
|
||||
<< QMetaMethod();
|
||||
|
||||
QTest::addRow("Empty signal")
|
||||
<< "QSignalSpy: Not a valid signal: ''"_ba
|
||||
<< "QSignalSpy: Null signal is not valid"_ba
|
||||
<< new QObject(this)
|
||||
<< QMetaMethod();
|
||||
|
||||
QTest::addRow("Method is not a signal")
|
||||
<< "QSignalSpy: Not a valid signal: 'deleteLater()'"_ba
|
||||
<< "QSignalSpy: Not a signal: 'deleteLater()'"_ba
|
||||
<< new QObject(this)
|
||||
<< QObject::staticMetaObject.method(QObject::staticMetaObject.indexOfMethod("deleteLater()"));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user