diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-07-21 23:23:04 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-07-21 23:23:04 +0300 |
commit | 5a1fa36c066d6b44abf450b7f9e0e845032b5723 (patch) | |
tree | 5572e2279a1e35be83d6eefafc758071b1d40a08 /src | |
parent | 7c3553f172b7632dccd56429c4dbbb0fd350bea0 (diff) | |
download | paranucker-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.cpp | 15 |
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; - } -*/ } } |