From d37d8e962a1b9e83800d17207c78bc87f7d64c31 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Fri, 14 Sep 2018 22:58:58 +0200 Subject: QAccessibleTable(Header)Cell: fix isValid() QAccessibleTable(Header)Cell::isValid() did not check if the view is still valid as it is done in QAccessibleTable::isValid() which can lead to a crash during destruction when e.g. operator<<(QAccessibleInterface) is called. Change-Id: I930bf4c22aa0aa6868f58a8e5d0dd1557f6b17af Reviewed-by: Friedemann Kleint Reviewed-by: Richard Moe Gustavsen Reviewed-by: Frederik Gladhorn --- src/widgets/accessible/itemviews.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/widgets/accessible') diff --git a/src/widgets/accessible/itemviews.cpp b/src/widgets/accessible/itemviews.cpp index 04a5dcc878..159d61d683 100644 --- a/src/widgets/accessible/itemviews.cpp +++ b/src/widgets/accessible/itemviews.cpp @@ -110,7 +110,7 @@ QAccessibleTable::QAccessibleTable(QWidget *w) bool QAccessibleTable::isValid() const { - return (view() && !qobject_cast(view())->d_func()->data.in_destructor); + return view() && !qt_widget_private(view())->data.in_destructor; } QAccessibleTable::~QAccessibleTable() @@ -1091,7 +1091,8 @@ void QAccessibleTableCell::setText(QAccessible::Text /*t*/, const QString &text) bool QAccessibleTableCell::isValid() const { - return view && view->model() && m_index.isValid(); + return view && !qt_widget_private(view)->data.in_destructor + && view->model() && m_index.isValid(); } QAccessibleInterface *QAccessibleTableCell::parent() const @@ -1180,7 +1181,8 @@ void QAccessibleTableHeaderCell::setText(QAccessible::Text, const QString &) bool QAccessibleTableHeaderCell::isValid() const { - return view && view->model() && (index >= 0) + return view && !qt_widget_private(view)->data.in_destructor + && view->model() && (index >= 0) && ((orientation == Qt::Horizontal) ? (index < view->model()->columnCount()) : (index < view->model()->rowCount())); } -- cgit v1.2.3