[PATCH:libXaw] Fix xload crashes if the window is wider than 2048 pixels
Alan Coopersmith
alan.coopersmith at oracle.com
Sun Mar 25 05:45:47 UTC 2018
https://bugs.freedesktop.org/show_bug.cgi?id=96670
Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
---
I wasn't sure if the size of valuedata could be changed without breaking
the ABI, since it's embedded in the class structure, so I just added
bounds checks to keep us from exceeding it. If you need more than 2048
points of load average data, you probably want a better monitoring tool
than xload anyway.
src/StripChart.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/src/StripChart.c b/src/StripChart.c
index fa7357c..401036b 100644
--- a/src/StripChart.c
+++ b/src/StripChart.c
@@ -57,6 +57,8 @@ SOFTWARE.
#include "Private.h"
#define MS_PER_SEC 1000
+#define NUM_VALUEDATA(w) (sizeof((w)->strip_chart.valuedata) / \
+ sizeof((w)->strip_chart.valuedata[0]))
/*
* Class Methods
@@ -317,7 +319,8 @@ draw_it(XtPointer client_data, XtIntervalId *id)
w->strip_chart.update * MS_PER_SEC,draw_it,
client_data);
- if (w->strip_chart.interval >= XtWidth(w))
+ if ((w->strip_chart.interval >= XtWidth(w)) ||
+ (w->strip_chart.interval >= NUM_VALUEDATA(w)))
MoveChart((StripChartWidget)w, True);
/* Get the value, stash the point and draw corresponding line */
@@ -410,6 +413,9 @@ repaint_window(StripChartWidget w, int left, int width)
if (next < ++width)
width = next;
+ if (width > NUM_VALUEDATA(w))
+ width = NUM_VALUEDATA(w);
+
/* Draw data point lines */
for (i = left; i < width; i++) {
int y = XtHeight(w) - (XtHeight(w) * w->strip_chart.valuedata[i])
@@ -449,12 +455,16 @@ MoveChart(StripChartWidget w, Bool blit)
if (!XtIsRealized((Widget)w))
return;
+ if (XtWidth(w) > NUM_VALUEDATA(w))
+ j = (int) NUM_VALUEDATA(w);
+ else
+ j = (int) XtWidth(w);
if (w->strip_chart.jump_val < 0)
w->strip_chart.jump_val = DEFAULT_JUMP;
if (w->strip_chart.jump_val == DEFAULT_JUMP)
- j = XtWidth(w) >> 1;
+ j = j >> 1;
else {
- j = (int)XtWidth(w) - w->strip_chart.jump_val;
+ j -= w->strip_chart.jump_val;
if (j < 0)
j = 0;
}
--
2.15.0
More information about the xorg-devel
mailing list