From 05072ed0d718ca89674a0ba3fb22ba1711f37b93 Mon Sep 17 00:00:00 2001 From: ksterker Date: Wed, 4 Aug 2010 21:38:47 +0200 Subject: [PATCH] FIXED potential access to iterators that point to the end of a list --- src/dlgedit/dlg_module.cc | 3 +++ src/dlgedit/dlg_node.cc | 2 +- src/dlgedit/gui_graph.cc | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/dlgedit/dlg_module.cc b/src/dlgedit/dlg_module.cc index 260263a..33c967d 100644 --- a/src/dlgedit/dlg_module.cc +++ b/src/dlgedit/dlg_module.cc @@ -224,6 +224,9 @@ void DlgModule::deleteNode (DlgNode *node) // if the node is a circle, also delete the attached arrows if (node->type () != LINK) { + // reset traversal info if current node gets deleted + traverse_.clear(); + // delete all preceding arrows for (DlgNode *i = node->prev (FIRST); i != NULL; i = node->prev (FIRST)) { diff --git a/src/dlgedit/dlg_node.cc b/src/dlgedit/dlg_node.cc index e9ff146..6e690e3 100644 --- a/src/dlgedit/dlg_node.cc +++ b/src/dlgedit/dlg_node.cc @@ -83,7 +83,7 @@ DlgNode* DlgNode::getNode (std::list::iterator &it, } // forward iteration - if (offset > 0) + if (offset >= 0) { for (int i = 0; i < offset && it != lst.end (); i++, it++); if (it != lst.end ()) return *it; diff --git a/src/dlgedit/gui_graph.cc b/src/dlgedit/gui_graph.cc index 3b9b01a..a950af1 100644 --- a/src/dlgedit/gui_graph.cc +++ b/src/dlgedit/gui_graph.cc @@ -201,7 +201,7 @@ bool GuiGraph::newArrow (DlgPoint &point) if (end == NULL) return false; } - // no loops and no bidirectional connections + // no loops and no duplicate connections if (start == end || ((DlgCircle *) start)->hasChild (end)) return false; // no connection between start and end if both are PLAYER nodes