opencsd: etm4: fix overrun error in p0 stack erase from front. (github #53, #58)

Possible overrun error when using iterators in mispredictAtoms.
Fix p0 stack to ensure iterator cannot run past end() element & correctly
take reference on element for later deleting after iterator is erased.

Reported-by yabinc <yabinc@google.com> (github issue #53, #58)

Signed-off-by: Mike Leach <mike.leach@linaro.org>
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 @@
 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;
 }