From 7413bdc50cfb6092447e6fa69bdcdf83237e3780 Mon Sep 17 00:00:00 2001 From: thunder2 Date: Sun, 10 Feb 2013 23:28:06 +0000 Subject: [PATCH] Fixed crash in RsDataService::retrieveNxsGrps - accessing a deleted iterator. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6121 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libretroshare/src/gxs/rsdataservice.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libretroshare/src/gxs/rsdataservice.cc b/libretroshare/src/gxs/rsdataservice.cc index 739b60e5f..9c60ef77f 100644 --- a/libretroshare/src/gxs/rsdataservice.cc +++ b/libretroshare/src/gxs/rsdataservice.cc @@ -654,6 +654,8 @@ int RsDataService::retrieveNxsGrps(std::map &grp, bool RsStackMutex stack(mDbMutex); std::map::iterator mit = grp.begin(); + std::list toRemove; + for(; mit != grp.end(); mit++) { const std::string& grpId = mit->first; @@ -669,12 +671,18 @@ int RsDataService::retrieveNxsGrps(std::map &grp, bool RsNxsGrp* ng = grps.front(); grp[ng->grpId] = ng; }else{ - grp.erase(grpId); + toRemove.push_back(grpId); } delete c; } } + + std::list::iterator grpIdIt; + for (grpIdIt = toRemove.begin(); grpIdIt != toRemove.end(); ++grpIdIt) + { + grp.erase(*grpIdIt); + } } if(withMeta)