Skip to content

Commit 61ad257

Browse files
authored
Solve segfaults caused by expanding / refreshing invalid subtrees (#114)
1 parent 5deaf85 commit 61ad257

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

bt_editor/mainwindow.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,6 +1041,16 @@ QtNodes::Node* MainWindow::subTreeExpand(GraphicContainer &container,
10411041
if( option == SUBTREE_EXPAND && subtree_model->expanded() == false)
10421042
{
10431043
auto subtree_container = getTabByName(subtree_name);
1044+
1045+
// Prevent expansion of invalid subtree
1046+
if( !subtree_container->containsValidTree() )
1047+
{
1048+
QMessageBox::warning(this, tr("Oops!"),
1049+
tr("Invalid SubTree. Can not expand SubTree."),
1050+
QMessageBox::Cancel);
1051+
return &node;
1052+
}
1053+
10441054
auto abs_subtree = BuildTreeFromScene( subtree_container->scene() );
10451055

10461056
subtree_model->setExpanded(true);
@@ -1361,6 +1371,16 @@ void MainWindow::refreshExpandedSubtrees()
13611371

13621372
for (auto subtree_node: subtree_nodes)
13631373
{
1374+
// expanded subtrees may have become invalid
1375+
// collapse invalid subtrees before refreshing them
1376+
auto subtree_model = dynamic_cast<SubtreeNodeModel*>(subtree_node->nodeDataModel());
1377+
const QString& subtree_name = subtree_model->registrationName();
1378+
auto subtree_container = getTabByName(subtree_name);
1379+
if ( subtree_model->expanded() && !subtree_container->containsValidTree() )
1380+
{
1381+
subTreeExpand( *container, *subtree_node, SUBTREE_COLLAPSE );
1382+
}
1383+
13641384
subTreeExpand( *container, *subtree_node, SUBTREE_REFRESH );
13651385
}
13661386
}

0 commit comments

Comments
 (0)