Move nullptr check to beginning of QInputDevice::operator<<

Nullptr check was performed after aquisition of the d-pointer.
That acquisition crashes if nullptr is passed to the operator, so the
actual check was never hit.

This patch moves the nullptr check to the beginning of the method.

Fixes: QTBUG-112174
Pick-to: 6.5 6.2 5.15
Change-Id: If339e2de9ce2e33e10d925e79ca06b3854a24f76
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
This commit is contained in:
Axel Spoerl 2023-03-21 12:32:28 +01:00
parent d7f795626d
commit f5c55da04b

View File

@ -360,19 +360,24 @@ bool QInputDevice::operator==(const QInputDevice &other) const
#ifndef QT_NO_DEBUG_STREAM #ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug debug, const QInputDevice *device) QDebug operator<<(QDebug debug, const QInputDevice *device)
{ {
const QInputDevicePrivate *d = QInputDevicePrivate::get(device);
if (d->pointingDeviceType)
return operator<<(debug, static_cast<const QPointingDevice *>(device));
QDebugStateSaver saver(debug); QDebugStateSaver saver(debug);
debug.nospace(); debug.nospace();
debug.noquote(); debug.noquote();
debug << "QInputDevice(";
if (!device) {
debug << "0)";
return debug;
}
const QInputDevicePrivate *d = QInputDevicePrivate::get(device);
if (d->pointingDeviceType)
return operator<<(debug, static_cast<const QPointingDevice *>(device));
debug << "QInputDevice("; debug << "QInputDevice(";
if (device) {
debug << '"' << device->name() << "\", type=" << device->type() debug << '"' << device->name() << "\", type=" << device->type()
<< Qt::hex << ", ID=" << device->systemId() << ", seat='" << device->seatName() << "'"; << Qt::hex << ", ID=" << device->systemId() << ", seat='" << device->seatName() << "'";
} else {
debug << '0';
}
debug << ')'; debug << ')';
return debug; return debug;
} }