From bdcbbd7d5ba41ef3aeb24c12ef22ad2fdb7aac90 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Mon, 18 Sep 2017 00:41:20 +0200 Subject: QTreeWidgetItem::insertChildren: ignore out of bounds indexes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QTreeWidgetItem::insertChildren should behave like a more-optimized QTreeWidgetItem::insertChild. Unlike the latter, the former lacks out-of-bounds checks, resulting in successful insertions even when using an invalid index (say, bigger than the row/column count). Reintroduce some sanity checks instead. This allows to fix a "fixme" left in the autotest. [ChangeLog][QtWidgets][QTreeWidgetItem] QTreeWidgetItem::insertChildren now ignores insertions happening at invalid indices, for consistency with QTreeWidgetItem::insertChild. Change-Id: I1532597768cc6aff96a6e8f356bc6075b582801d Reviewed-by: Thorbjørn Lund Martsum --- src/widgets/itemviews/qtreewidget.cpp | 3 +++ .../auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp | 13 +++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp index 601ed44b55..334a3e0c75 100644 --- a/src/widgets/itemviews/qtreewidget.cpp +++ b/src/widgets/itemviews/qtreewidget.cpp @@ -2009,6 +2009,9 @@ void QTreeWidgetItem::addChildren(const QList &children) */ void QTreeWidgetItem::insertChildren(int index, const QList &children) { + if (index < 0 || index > this->children.count() || children.isEmpty()) + return; + if (view && view->isSortingEnabled()) { for (int n = 0; n < children.count(); ++n) insertChild(index, children.at(n)); diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp index 3317c79daa..61026c328f 100644 --- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp +++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp @@ -332,10 +332,19 @@ void tst_QTreeWidget::addTopLevelItem() for (int i = 0; i < 10; ++i) tops << new TreeItem(); int count = tree.topLevelItemCount(); - tree.insertTopLevelItems(100000, tops); - // ### fixme + tree.insertTopLevelItems(count, tops); QCOMPARE(tree.topLevelItemCount(), count + 10); } + + // invalid insert + { + tops.clear(); + for (int i = 0; i < 10; ++i) + tops << new TreeItem(); + int count = tree.topLevelItemCount(); + tree.insertTopLevelItems(100000, tops); // should be a no-op + QCOMPARE(tree.topLevelItemCount(), count); + } } void tst_QTreeWidget::currentItem_data() -- cgit v1.2.3