aboutsummaryrefslogtreecommitdiff
path: root/decoder/source/etmv4/trc_etmv4_stack_elem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'decoder/source/etmv4/trc_etmv4_stack_elem.cpp')
-rw-r--r--decoder/source/etmv4/trc_etmv4_stack_elem.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/decoder/source/etmv4/trc_etmv4_stack_elem.cpp b/decoder/source/etmv4/trc_etmv4_stack_elem.cpp
index a5d8894..be7221c 100644
--- a/decoder/source/etmv4/trc_etmv4_stack_elem.cpp
+++ b/decoder/source/etmv4/trc_etmv4_stack_elem.cpp
@@ -181,13 +181,18 @@ TrcStackElem *EtmV4P0Stack::from_front_next()
void EtmV4P0Stack::erase_curr_from_front()
{
std::deque<TrcStackElem *>::iterator erase_iter;
+
erase_iter = m_iter;
erase_iter--;
- m_P0_stack.erase(erase_iter);
+ TrcStackElem* pElem = *erase_iter;
+
+ // prevent overrun if we are erasing the last element
+ // - end() returned if no elements after the erased one.
+ m_iter = m_P0_stack.erase(erase_iter);
// explicitly delete the item here as the caller can no longer reference it.
// fixes memory leak from github issue #52
- delete *erase_iter;
+ delete pElem;
}