[fwbuilder-commits] [SCM] Firewall Builder GUI and Policy Compilers Open Source Code branch, develo
Brought to you by:
mikehorn
From: <gi...@ir...> - 2011-09-05 02:42:00
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Firewall Builder GUI and Policy Compilers Open Source Code". The branch, development has been updated via 6908ca9aa77d8e47db2bafddf546457fcfe108ca (commit) from 1b8c9aa5740871e0af283b19729bcd78cb403c0e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 6908ca9aa77d8e47db2bafddf546457fcfe108ca Author: Vadim Kurland <va...@sl...> Date: Sun Sep 4 20:02:26 2011 -0700 see #2654 fixes GUI crash that occured if user copied a rule from file A to file B, then closed file B, opened file C and tried to copy the same rule from A to C diff --git a/src/libfwbuilder/src/fwbuilder/FWObjectDatabase.cpp b/src/libfwbuilder/src/fwbuilder/FWObjectDatabase.cpp index 43d44ff..eea8f25 100644 --- a/src/libfwbuilder/src/fwbuilder/FWObjectDatabase.cpp +++ b/src/libfwbuilder/src/fwbuilder/FWObjectDatabase.cpp @@ -498,6 +498,25 @@ void FWObjectDatabase::buildIndex() addToIndexRecursive(this); } +void FWObjectDatabase::validateIndex() +{ + std::map<int, FWObject*>::iterator it; + for (it=obj_index.begin(); it!=obj_index.end(); ++it) + { + if (it->second->getRoot() != this) + { + cerr << "Object '" << it->second->getName() << "'" + << " ( " + << it->second + << " type " << it->second->getTypeName() << ")" + << " in index of db " << this + << " has incorrect db root ptr " + << it->second->getRoot() + << endl; + } + } +} + void FWObjectDatabase::_clearReferenceCounters(FWObject *o) { o->clearRefCounter(); diff --git a/src/libfwbuilder/src/fwbuilder/FWObjectDatabase.h b/src/libfwbuilder/src/fwbuilder/FWObjectDatabase.h index 876d77a..dcbbfd7 100644 --- a/src/libfwbuilder/src/fwbuilder/FWObjectDatabase.h +++ b/src/libfwbuilder/src/fwbuilder/FWObjectDatabase.h @@ -336,6 +336,11 @@ public: void getIndexStats(int &index_size, int &hit_counter, int &miss_counter); /** + * this function is intended for debugging. + */ + void validateIndex(); + + /** * Some operations, such as object tree merging, should ignore * read-only flag on individual objects. */ diff --git a/src/libfwbuilder/src/fwbuilder/FWObjectDatabase_tree_ops.cpp b/src/libfwbuilder/src/fwbuilder/FWObjectDatabase_tree_ops.cpp index 94011bc..7e7faaa 100644 --- a/src/libfwbuilder/src/fwbuilder/FWObjectDatabase_tree_ops.cpp +++ b/src/libfwbuilder/src/fwbuilder/FWObjectDatabase_tree_ops.cpp @@ -595,9 +595,10 @@ FWObject* FWObjectDatabase::_recursively_copy_subtree( // search for old_ptr_obj in the index. If it is found, we do not // need to copy it and its ID is valid (perhaps standard object?) - if (findInIndex(old_ptr_obj->getId())!=NULL) + n_ptr_obj = findInIndex(old_ptr_obj->getId()); + if (n_ptr_obj != NULL) { - nobj->addRef(old_ptr_obj); + nobj->addRef(n_ptr_obj); continue; } diff --git a/src/libgui/RuleSetView.cpp b/src/libgui/RuleSetView.cpp index 888d702..a513322 100644 --- a/src/libgui/RuleSetView.cpp +++ b/src/libgui/RuleSetView.cpp @@ -1504,9 +1504,7 @@ void RuleSetView::pasteRuleAbove() i!=FWObjectClipboard::obj_clipboard->end(); ++i) { Rule *rule = Rule::cast(createInsertTemplate(i->second, i->first)); - if (!rule || !md->checkRuleType(rule)) continue; - project->undoStack->push( new FWCmdRuleInsert( project, md->getRuleSet(), md->getRulePosition(index), false, rule)); @@ -1557,11 +1555,32 @@ FWObject* RuleSetView::createInsertTemplate(ProjectPanel* proj_p, int id) md->getRuleSet()->remove(t); project->m_panel->om->reload(); - } else { + + } else + { t = proj_p->db()->create(co->getTypeName()); t->duplicate(co); } + if (fwbdebug) + { + cerr << "rulesrt->getRoot()=" << md->getRuleSet()->getRoot() + << " " + << "proj_p->db()=" << proj_p->db() + << " " + << "proj_p file=" << proj_p->getFileName().toStdString() + << " " + << "id=" << id + << " " + << "co=" << co + << " " + << "co->getRoot()=" << co->getRoot() + << endl; + + cerr << "Validating database index" << endl; + proj_p->db()->getRoot()->validateIndex(); + } + return t; } ----------------------------------------------------------------------- Summary of changes: .../src/fwbuilder/FWObjectDatabase.cpp | 19 +++++++++++++++ src/libfwbuilder/src/fwbuilder/FWObjectDatabase.h | 5 ++++ .../src/fwbuilder/FWObjectDatabase_tree_ops.cpp | 5 ++- src/libgui/RuleSetView.cpp | 25 +++++++++++++++++-- 4 files changed, 49 insertions(+), 5 deletions(-) hooks/post-receive -- Firewall Builder GUI and Policy Compilers Open Source Code |