diff options
Diffstat (limited to 'abs/core/qt/qtbug-16292.patch')
-rw-r--r-- | abs/core/qt/qtbug-16292.patch | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/abs/core/qt/qtbug-16292.patch b/abs/core/qt/qtbug-16292.patch new file mode 100644 index 0000000..9728e28 --- /dev/null +++ b/abs/core/qt/qtbug-16292.patch @@ -0,0 +1,62 @@ +From e340844bd614add505a39a3a6b915632476f6305 Mon Sep 17 00:00:00 2001 +From: Gabriel de Dietrich <gabriel.dietrich-de@nokia.com> +Date: Tue, 15 Feb 2011 11:19:26 +0100 +Subject: [PATCH] Fix crash in KPackageKit + +QTreeViewPrivate::itemHeight() may refer to an invalid QModelIndex +after calling QTreeView::indexRowSizeHint(). + +Same thing inside QTreeView::indexRowSizeHint(), since +QHeaderView::count() will call +QAbstractItemViewPrivate::executePostedLayout() which may invalidate +all the QModelIndex. + +Reviewed-by: Olivier +Task-number: QTBUG-16292 +--- + src/gui/itemviews/qtreeview.cpp | 11 ++++++----- + 1 files changed, 6 insertions(+), 5 deletions(-) + +diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp +index f1f3236..c0573bb 100644 +--- a/src/gui/itemviews/qtreeview.cpp ++++ b/src/gui/itemviews/qtreeview.cpp +@@ -2753,6 +2753,7 @@ int QTreeView::indexRowSizeHint(const QModelIndex &index) const + + int start = -1; + int end = -1; ++ int indexRow = index.row(); + int count = d->header->count(); + bool emptyHeader = (count == 0); + QModelIndex parent = index.parent(); +@@ -2789,7 +2790,7 @@ int QTreeView::indexRowSizeHint(const QModelIndex &index) const + int logicalColumn = emptyHeader ? column : d->header->logicalIndex(column); + if (d->header->isSectionHidden(logicalColumn)) + continue; +- QModelIndex idx = d->model->index(index.row(), logicalColumn, parent); ++ QModelIndex idx = d->model->index(indexRow, logicalColumn, parent); + if (idx.isValid()) { + QWidget *editor = d->editorForIndex(idx).editor; + if (editor && d->persistent.contains(editor)) { +@@ -3224,14 +3225,14 @@ int QTreeViewPrivate::itemHeight(int item) const + if (viewItems.isEmpty()) + return 0; + const QModelIndex &index = viewItems.at(item).index; ++ if (!index.isValid()) ++ return 0; + int height = viewItems.at(item).height; +- if (height <= 0 && index.isValid()) { ++ if (height <= 0) { + height = q_func()->indexRowSizeHint(index); + viewItems[item].height = height; + } +- if (!index.isValid() || height < 0) +- return 0; +- return height; ++ return qMax(height, 0); + } + + +-- +1.6.1 + |