summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-07-21 23:23:04 +0300
committerAndrei Karas <akaras@inbox.ru>2015-07-21 23:23:04 +0300
commit5a1fa36c066d6b44abf450b7f9e0e845032b5723 (patch)
tree5572e2279a1e35be83d6eefafc758071b1d40a08 /src
parent7c3553f172b7632dccd56429c4dbbb0fd350bea0 (diff)
downloadparanucker-5a1fa36c066d6b44abf450b7f9e0e845032b5723.tar.gz
paranucker-5a1fa36c066d6b44abf450b7f9e0e845032b5723.tar.bz2
paranucker-5a1fa36c066d6b44abf450b7f9e0e845032b5723.tar.xz
paranucker-5a1fa36c066d6b44abf450b7f9e0e845032b5723.zip
Fix possible memory corruption in working with linked variables.
Diffstat (limited to 'src')
-rw-r--r--src/analysis/collections.cpp15
1 files changed, 5 insertions, 10 deletions
diff --git a/src/analysis/collections.cpp b/src/analysis/collections.cpp
index 12fcd7a..def9573 100644
--- a/src/analysis/collections.cpp
+++ b/src/analysis/collections.cpp
@@ -283,6 +283,11 @@ void addLinkedVar(WalkItem &wi,
if (isIn(var, wi.linkedVars))
{
StringSet linked = wi.linkedVars[var];
+ if (linked.empty())
+ {
+ wi.linkedVars.erase(var);
+ return;
+ }
std::string newParent = *(linked.begin());
wi.linkedReverseVars.erase(newParent);
wi.linkedVars[newParent] = linked;
@@ -300,16 +305,6 @@ void addLinkedVar(WalkItem &wi,
wi.linkedReverseVars[it3] = newParent;
}
}
-/*
- StringSet oldLinked = wi.linkedVars[var];
- wi.linkedVars.erase(var);
- wi.linkedVars[parent].insert(oldLinked.begin(),
- oldLinked.end());
- FOR_EACH (it, oldLinked)
- {
- wi.linkedReverseVars[it] = parent;
- }
-*/
}
}