From 65a473f2b7050055e3b9d2fff5cef311e8b6f9dc Mon Sep 17 00:00:00 2001 From: marschap Date: Tue, 11 Apr 2006 20:57:15 +0000 Subject: [PATCH] fix checks in *_num() functions: only when/where necessary --- server/drivers/CFontz633.c | 3 +++ server/drivers/CFontzPacket.c | 2 +- server/drivers/IOWarrior.c | 2 +- server/drivers/MtxOrb.c | 3 +++ server/drivers/glcdlib.c | 3 +-- server/drivers/glk.c | 5 ++++- server/drivers/hd44780.c | 2 +- server/drivers/lcterm.c | 2 +- server/drivers/sed1520.c | 11 +++++------ server/drivers/stv5730.c | 12 +++--------- server/drivers/svgalib_drv.c | 7 +++++-- server/drivers/xosdlib_drv.c | 9 ++++++--- 12 files changed, 34 insertions(+), 27 deletions(-) diff --git a/server/drivers/CFontz633.c b/server/drivers/CFontz633.c index d20c361..f15d305 100644 --- a/server/drivers/CFontz633.c +++ b/server/drivers/CFontz633.c @@ -884,6 +884,9 @@ CFontz633_num (Driver *drvthis, int x, int num) PrivateData *p = drvthis->private_data; unsigned char out[5]; + if ((x <= 0) || (x > p->width)) + return; + snprintf(out, sizeof(out), "%c%c%c", 28, x, num); write(p->fd, out, 3); */ diff --git a/server/drivers/CFontzPacket.c b/server/drivers/CFontzPacket.c index e2ef732..2772693 100644 --- a/server/drivers/CFontzPacket.c +++ b/server/drivers/CFontzPacket.c @@ -1241,7 +1241,7 @@ char bignum_map[11][4][3] = { if ((num < 0) || (num > 10)) return; - if ((p->width >= 20) && (p->height >= 4)) { + if (p->height >= 4) { int y = (p->height - 2) / 2; /* center vertically */ int x2, y2; diff --git a/server/drivers/IOWarrior.c b/server/drivers/IOWarrior.c index bc7d0a5..3f015a1 100644 --- a/server/drivers/IOWarrior.c +++ b/server/drivers/IOWarrior.c @@ -1002,7 +1002,7 @@ char bignum_map[11][4][3] = { IOWarrior_init_num(drvthis); - if ((p->width >= 20) && (p->height >= 4)) { + if (p->height >= 4) { int y = (p->height - 2) / 2; /* center vertically */ int x2, y2; diff --git a/server/drivers/MtxOrb.c b/server/drivers/MtxOrb.c index a77385c..0854a97 100644 --- a/server/drivers/MtxOrb.c +++ b/server/drivers/MtxOrb.c @@ -1127,6 +1127,9 @@ MtxOrb_num (Driver *drvthis, int pos, int val) int x, y; int c; + if ((val < 0) || (val > 10)) + return; + debug(RPT_DEBUG, "MtxOrb: write big number %d at %d", val, pos); /* Currently we are bignum but if bigalpha is there remove this line */ diff --git a/server/drivers/glcdlib.c b/server/drivers/glcdlib.c index 27a0635..5cf82e2 100644 --- a/server/drivers/glcdlib.c +++ b/server/drivers/glcdlib.c @@ -382,9 +382,8 @@ glcdlib_set_char (Driver *drvthis, int n, char *dat) MODULE_EXPORT void glcdlib_num (Driver *drvthis, int x, int num) { - x--; glcdlibPD * pPD = drvthis->private_data; - glcddriverDrawBigNum(pPD->glcdDriver, x, num); + glcddriverDrawBigNum(pPD->glcdDriver, x - 1, num); } ///////////////////////////////////////////////////////////////// diff --git a/server/drivers/glk.c b/server/drivers/glk.c index ebf9f49..ab84077 100644 --- a/server/drivers/glk.c +++ b/server/drivers/glk.c @@ -544,8 +544,11 @@ glk_num(Driver *drvthis, int x, int num) debug(RPT_DEBUG, "glk_num(%d, %d)", x, num); + if ((num < 0) || (num > 10)) + return; + if ((x > 0) && (x <= p->width)) - p->framebuf[x-1] = num + '0'; + p->framebuf[x-1] = (num >= 10) ? ':' : (num + '0'); } ////////////////////////////////////////////////////////////////////// diff --git a/server/drivers/hd44780.c b/server/drivers/hd44780.c index a25610d..e949ac7 100644 --- a/server/drivers/hd44780.c +++ b/server/drivers/hd44780.c @@ -938,7 +938,7 @@ HD44780_num (Driver *drvthis, int x, int num) if ((num < 0) || (num > 10)) return; - if ((p->width >= 20) && (p->height >= 4)) { + if (p->height >= 4) { int y = (p->height - 2) / 2; int x2, y2; diff --git a/server/drivers/lcterm.c b/server/drivers/lcterm.c index 1598e80..5e1128f 100644 --- a/server/drivers/lcterm.c +++ b/server/drivers/lcterm.c @@ -706,7 +706,7 @@ lcterm_num (Driver *drvthis, int x, int num) if ((num < 0) || (num > 10)) return; - if ((p->width >= 20) && (p->height >= 4)) { + if (p->height >= 4) { int y = (p->height - 2) / 2; int x2, y2; diff --git a/server/drivers/sed1520.c b/server/drivers/sed1520.c index a390092..da542da 100644 --- a/server/drivers/sed1520.c +++ b/server/drivers/sed1520.c @@ -342,10 +342,7 @@ sed1520_num (Driver *drvthis, int x, int num) x--; // return on illegal char or illegal position - if ((x < 0) || (x >= WIDTH) || (num < 0) || (num > 10)) - return; - // when char isn't colon, restrict the position even further - if ((num != 10) && (x >= WIDTH-2)) + if ((x >= WIDTH) || (num < 0) || (num > 10)) return; if (num == 10) { // colon @@ -357,7 +354,8 @@ sed1520_num (Driver *drvthis, int x, int num) if (*(fontbigdp[(z * 8) + i] + c) == '.') s |= 0x80; } - p->framebuf[((z + 1) * PIXELWIDTH) + (x * CELLWIDTH) + c] = s; + if ((x * CELLWIDTH + c >= 0) && (x * CELLWIDTH + c < PIXELWIDTH)) + p->framebuf[((z + 1) * PIXELWIDTH) + (x * CELLWIDTH) + c] = s; } } } @@ -370,7 +368,8 @@ sed1520_num (Driver *drvthis, int x, int num) if (*(fontbignum[num][z * 8 + i] + c) == '.') s |= 0x80; } - p->framebuf[((z + 1) * PIXELWIDTH) + (x * CELLWIDTH) + c] = s; + if ((x * CELLWIDTH + c >= 0) && (x * CELLWIDTH + c < PIXELWIDTH)) + p->framebuf[((z + 1) * PIXELWIDTH) + (x * CELLWIDTH) + c] = s; } } } diff --git a/server/drivers/stv5730.c b/server/drivers/stv5730.c index cad752a..64828ac 100644 --- a/server/drivers/stv5730.c +++ b/server/drivers/stv5730.c @@ -273,10 +273,8 @@ stv5730_drawchar2fb (Driver *drvthis, int x, int y, unsigned char z) { PrivateData *p = drvthis->private_data; - if (x < 0 || x >= STV5730_WID || y < 0 || y >= STV5730_HGT) - return; - p->framebuf[(y * STV5730_WID) + x] = stv5730_to_ascii[(unsigned int) z]; - + if ((x >= 0) && (x < STV5730_WID) && (y >= 0) && (y < STV5730_HGT)) + p->framebuf[(y * STV5730_WID) + x] = stv5730_to_ascii[(unsigned int) z]; } ///////////////////////////////////////////////////////////////// @@ -553,11 +551,7 @@ stv5730_num (Driver *drvthis, int x, int num) x--; - if (x < 0 || x > 19 || num < 0 || num > 10) - return; - if (num != 10 && (x < 0 || x > 17)) - return; - if (num == 10 && (x < 0 || x > 19)) + if ((x >= STV5730_WID) || (num < 0) || (num > 10)) return; for (j = 1; j < 10; j++) { diff --git a/server/drivers/svgalib_drv.c b/server/drivers/svgalib_drv.c index 5f30cbf..f4a7d03 100644 --- a/server/drivers/svgalib_drv.c +++ b/server/drivers/svgalib_drv.c @@ -520,12 +520,15 @@ svgalib_drv_chr (Driver *drvthis, int x, int y, char c) MODULE_EXPORT void svgalib_drv_num (Driver *drvthis, int x, int num) { - char c; int y, dx; + char c; debug(RPT_DEBUG, "%s(%p, %d, %d)", __FUNCTION__, drvthis, x, num); - c = '0' + num; + if ((num < 0) || (num > 10)) + return; + + c = (num >= 10) ? ':' : ('0' + num); for (y = 1; y < 5; y++) for (dx = 0; dx < 3; dx++) diff --git a/server/drivers/xosdlib_drv.c b/server/drivers/xosdlib_drv.c index 3fe88d1..97cd207 100644 --- a/server/drivers/xosdlib_drv.c +++ b/server/drivers/xosdlib_drv.c @@ -317,16 +317,19 @@ xosdlib_drv_chr (Driver *drvthis, int x, int y, char c) MODULE_EXPORT void xosdlib_drv_old_num (Driver *drvthis, int x, int num) { - char c; int y, dx; + char c; debug(RPT_DEBUG, "%s(%p, %d, %d)", __FUNCTION__, drvthis, x, num); - c = '0' + num; + if ((num < 0) || (num > 10)) + return; + + c = (num >= 10) ? ':' : ('0' + num); for (y = 1; y < 5; y++) for (dx = 0; dx < 3; dx++) - xosdlib_drv_chr (drvthis, x + dx, y, c); + xosdlib_drv_chr(drvthis, x + dx, y, c); }