From 5d25aa3b81da2f2edd7ce0bd64028b740f221a9a Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Tue, 10 Dec 2024 15:40:12 +0100 Subject: [PATCH] QWidget::mapTo()/mapFrom(): Do not crash if parent argument is invalid These functions iterate through the parent hierarchy until the widget given as argument is found. If never found, the code would assert (in debug mode) or just silently crash (in release mode). No need to bring down the entire application just because some widget coordinate calculation is off. Instead, just emit a qWarning and return cleanly. Task-number: QTBUG-132072 Change-Id: I4d13f46037cdcf855f76e040f941a8a7050ab12b Reviewed-by: Richard Moe Gustavsen (cherry picked from commit 73221d263823d50e525858d613ce93769698454a) Reviewed-by: Qt Cherry-pick Bot (cherry picked from commit 49cf61f6416573809f8a095fa0d4aa65890b8218) --- src/widgets/kernel/qwidget.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index a58a3633358..8d1d0af8964 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -4219,10 +4219,12 @@ QPointF QWidget::mapTo(const QWidget *parent, const QPointF &pos) const if (parent) { const QWidget * w = this; while (w != parent) { - Q_ASSERT_X(w, "QWidget::mapTo(const QWidget *parent, const QPointF &pos)", - "parent must be in parent hierarchy"); p = w->mapToParent(p); w = w->parentWidget(); + if (!w) { + qWarning("QWidget::mapTo(): parent must be in parent hierarchy"); + break; + } } } return p; @@ -4251,11 +4253,12 @@ QPointF QWidget::mapFrom(const QWidget *parent, const QPointF &pos) const if (parent) { const QWidget * w = this; while (w != parent) { - Q_ASSERT_X(w, "QWidget::mapFrom(const QWidget *parent, const QPoint &pos)", - "parent must be in parent hierarchy"); - p = w->mapFromParent(p); w = w->parentWidget(); + if (!w) { + qWarning("QWidget::mapFrom(): parent must be in parent hierarchy"); + break; + } } } return p;