summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES2
-rw-r--r--src/fl_vertex.cxx17
2 files changed, 16 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 6465ed094..de3973e1b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,8 @@ CHANGES IN FLTK 1.1.7
- Documentation fixes (STR #648, STR #692, STR #730, STR
#744, STR #745)
+ - Increased matrix stack depth and added over/underfolw error
+ (STR #924)
- Reverted Mac Carbon Clipping simplification that broke
subwindow clipping (STR #908, SVN r4386)
- Fixed bitmap scaling code
diff --git a/src/fl_vertex.cxx b/src/fl_vertex.cxx
index 9d9938f09..d9ee96c3a 100644
--- a/src/fl_vertex.cxx
+++ b/src/fl_vertex.cxx
@@ -34,6 +34,7 @@
#include <config.h>
#include <FL/fl_draw.H>
#include <FL/x.H>
+#include <Fl/FL.H>
#include <FL/math.h>
#include <stdlib.h>
@@ -41,12 +42,22 @@ struct matrix {double a, b, c, d, x, y;};
static matrix m = {1, 0, 0, 1, 0, 0};
-static matrix stack[10];
+static matrix stack[32];
static int sptr = 0;
-void fl_push_matrix() {stack[sptr++] = m;}
+void fl_push_matrix() {
+ if (sptr==32)
+ Fl::error("fl_push_matrix(): matrix stack overflow.");
+ else
+ stack[sptr++] = m;
+}
-void fl_pop_matrix() {m = stack[--sptr];}
+void fl_pop_matrix() {
+ if (sptr==0)
+ Fl::error("fl_pop_matrix(): matrix stack underflow.");
+ else
+ m = stack[--sptr];
+}
void fl_mult_matrix(double a, double b, double c, double d, double x, double y) {
matrix o;