aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/expressions.h
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2014-02-15 17:41:53 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2014-02-15 18:38:25 +0100
commite5563f887206cd6b39beeaa53c545d7dbae67476 (patch)
tree7e1102990ae3c85e5c9424518691876c61302ccb /src/expressions.h
parenta30c90206d7011905955063ae432a5be30dca6f4 (diff)
downloadsciteco-e5563f887206cd6b39beeaa53c545d7dbae67476.tar.gz
report stack overflows as errors & fixed ValueStack dtor
* ValueStack destruction might have resulted in Segfaults at shutdown
Diffstat (limited to 'src/expressions.h')
-rw-r--r--src/expressions.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/expressions.h b/src/expressions.h
index 83d3b12..7785215 100644
--- a/src/expressions.h
+++ b/src/expressions.h
@@ -21,6 +21,7 @@
#include <glib.h>
#include "undo.h"
+#include "parser.h" // State::Error
template <typename Type>
class ValueStack {
@@ -71,7 +72,7 @@ public:
~ValueStack()
{
- delete stack;
+ delete[] stack;
}
inline int
@@ -83,6 +84,9 @@ public:
inline Type &
push(Type value, int index = 1)
{
+ if (items() == size)
+ throw State::Error("Stack overflow");
+
for (int i = -index + 1; i; i++)
top[i+1] = top[i];