Skip to content

Commit

Permalink
Fix two crash bugs that could happen if you delete nodes or messages
Browse files Browse the repository at this point in the history
  • Loading branch information
collin80 committed Sep 6, 2023
1 parent b31bd3f commit 678e322
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions dbc/dbcmaineditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -897,7 +897,21 @@ void DBCMainEditor::deleteNode(DBC_NODE *node)
int numItems = dbcFile->messageHandler->getCount();
for (int i = numItems - 1; i > -1; i--)
{
if (dbcFile->messageHandler->findMsgByIdx(i)->sender == node) deleteMessage(dbcFile->messageHandler->findMsgByIdx(i));
DBC_MESSAGE *msg = dbcFile->messageHandler->findMsgByIdx(i);
if (msg->sender == node) deleteMessage(dbcFile->messageHandler->findMsgByIdx(i));
//also, each signal has a receiver field that references the nodes. It was probably stupid to store
//pointers to node structures in signals but that's how it is currently. Need to iterate over all
//signals in all messages and set the receiver field to Vector__XXX if the old receiver node was this one.
else //still check for signals with receiver set to this node
{
DBC_NODE *unset_node = dbcFile->findNodeByName("Vector__XXX");
int numSigs = msg->sigHandler->getCount();
for (int j = numSigs - 1; j > -1; j--)
{
DBC_SIGNAL *sig = msg->sigHandler->findSignalByIdx(j);
if (sig->receiver == node) sig->receiver = unset_node;
}
}
}

nodeToItem.remove(node);
Expand Down Expand Up @@ -948,6 +962,6 @@ void DBCMainEditor::deleteSignal(DBC_SIGNAL *sig)
itemToSignal.remove(currItem);
signalToItem.remove(sig);
ui->treeDBC->removeItemWidget(currItem, 0);
delete currItem;
//delete currItem; //already removed by above remove call
dbcFile->setDirtyFlag();
}

0 comments on commit 678e322

Please sign in to comment.