aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2014-10-14 10:53:46 +0000
committerDimitri Sokolyuk <demon@dim13.org>2014-10-14 10:53:46 +0000
commit216cec1d90912e1bbd1ed3d5a8890d048ce5d69c (patch)
tree5157f2e0debb06ea6be8d1a7f44eb678eb4f4298
parent318d40ca647df693e9234cd3da203cc2549bd87c (diff)
prevent buffer overrun
-rw-r--r--Display.c7
-rw-r--r--Sgraph.c8
2 files changed, 10 insertions, 5 deletions
diff --git a/Display.c b/Display.c
index 3c8cf2d..0cab31b 100644
--- a/Display.c
+++ b/Display.c
@@ -7,6 +7,7 @@
#include "SgraphP.h"
#define Trace(w) warnx("%s.%s", XtClass(w)->core_class.class_name, __func__)
+#define SCALE 3
static void Initialize(Widget, Widget, ArgList, Cardinal *);
static void ChangeManaged(Widget);
@@ -111,7 +112,7 @@ Initialize(Widget req, Widget new, ArgList args, Cardinal *num_args)
sizeof(int));
n = 0;
XtSetArg(arg[n], XtNvalues, dw->display.data[i]); n++;
- XtSetArg(arg[n], XtNsize, dw->display.num_samples); n++;
+ XtSetArg(arg[n], XtNsize, dw->display.num_samples / SCALE); n++;
XtSetArg(arg[n], XtNmirror, i % 2 ? False : True); n++;
XtCreateManagedWidget("SGraph", sgraphWidgetClass, new, arg, n);
}
@@ -145,7 +146,7 @@ ChangeManaged(Widget w)
w->core.height = height;
/* XXX */
- dw->display.num_samples = dw->composite.children[0]->core.width * 3;
+ dw->display.num_samples = dw->composite.children[0]->core.width * SCALE;
}
static void
@@ -175,7 +176,7 @@ Resize(Widget w)
}
/* XXX */
- dw->display.num_samples = dw->composite.children[0]->core.width * 3;
+ dw->display.num_samples = dw->composite.children[0]->core.width * SCALE;
}
static void
diff --git a/Sgraph.c b/Sgraph.c
index 357e021..cbcabf3 100644
--- a/Sgraph.c
+++ b/Sgraph.c
@@ -186,7 +186,7 @@ static void
Redisplay(Widget w, XEvent *event, Region r)
{
SgraphWidget sw = (SgraphWidget)w;
- Dimension i, x, y;
+ Dimension i, x, y, width;
XdbeSwapInfo swap;
if (!XtIsRealized(w))
@@ -196,7 +196,11 @@ Redisplay(Widget w, XEvent *event, Region r)
Trace(w);
#endif
- for (i = 0; i < sw->core.width - 1; i++) {
+ width = sw->core.width;
+ if (width > sw->sgraph.size)
+ width = sw->sgraph.size;
+
+ for (i = 0; i < width - 1; i++) {
y = sw->sgraph.values[i];
x = sw->sgraph.mirror ? sw->core.width - i : i;