diff options
author | Axel Spoerl <axel.spoerl@qt.io> | 2023-03-21 12:32:28 +0100 |
---|---|---|
committer | Axel Spoerl <axel.spoerl@qt.io> | 2023-03-21 16:19:20 +0100 |
commit | f5c55da04bc53bcaf93bdb34588ef21af10333c6 (patch) | |
tree | cbd8ba2a1a87db9d27447bed292624017df277a0 /src/gui/kernel/qinputdevice.cpp | |
parent | d7f795626dc2d1691df4fa91d174654510a81ef4 (diff) |
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>
Diffstat (limited to 'src/gui/kernel/qinputdevice.cpp')
-rw-r--r-- | src/gui/kernel/qinputdevice.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/gui/kernel/qinputdevice.cpp b/src/gui/kernel/qinputdevice.cpp index b49fe4b15c..8a4066c0a3 100644 --- a/src/gui/kernel/qinputdevice.cpp +++ b/src/gui/kernel/qinputdevice.cpp @@ -360,19 +360,24 @@ bool QInputDevice::operator==(const QInputDevice &other) const #ifndef QT_NO_DEBUG_STREAM 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); debug.nospace(); debug.noquote(); + debug << "QInputDevice("; - if (device) { - debug << '"' << device->name() << "\", type=" << device->type() - << Qt::hex << ", ID=" << device->systemId() << ", seat='" << device->seatName() << "'"; - } else { - debug << '0'; + 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 << '"' << device->name() << "\", type=" << device->type() + << Qt::hex << ", ID=" << device->systemId() << ", seat='" << device->seatName() << "'"; debug << ')'; return debug; } |