+ Improve data validity checking.

This commit is contained in:
ddouthitt
2001-09-25 00:54:24 +00:00
parent 4b24b2e6f1
commit cf6ce9f1a4
+16 -28
View File
@@ -359,6 +359,9 @@ MtxOrb_init (lcd_logical_driver * driver, char *args)
return fd; return fd;
} }
#define ValidX(a) { if (x > MtxOrb->wid) { x = MtxOrb->wid; } else x < 1 ? 1 : x; }
#define ValidY(a) { if (y > MtxOrb->hgt) { y = MtxOrb->hgt; } else y < 1 ? 1 : y; }
// TODO: Check this quick hack to detect clear of the screen. // TODO: Check this quick hack to detect clear of the screen.
///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////
// Clear: catch up when the screen get clear to be able to // Clear: catch up when the screen get clear to be able to
@@ -394,20 +397,10 @@ MtxOrb_string (int x, int y, char *string)
{ {
int offset, siz; int offset, siz;
ValidX(x);
ValidY(y);
x--; y--; // Convert 1-based coords to 0-based... x--; y--; // Convert 1-based coords to 0-based...
// Check range of Y
if (y > MtxOrb->hgt) {
syslog(LOG_WARNING, "lcd height overflow!");
return;
}
// Check range of X
if (x > MtxOrb->wid) {
syslog(LOG_WARNING, "lcd width overflow!");
return;
}
offset = (y * MtxOrb->wid) + x; offset = (y * MtxOrb->wid) + x;
siz = (MtxOrb->wid * MtxOrb->hgt) - offset - 1; siz = (MtxOrb->wid * MtxOrb->hgt) - offset - 1;
siz = siz > strlen(string) ? strlen(string) : siz; siz = siz > strlen(string) ? strlen(string) : siz;
@@ -449,16 +442,8 @@ MtxOrb_chr (int x, int y, char c)
// Characters may or may NOT be alphabetic; it appears // Characters may or may NOT be alphabetic; it appears
// that characters 0..4 (or similar) are graphic fonts // that characters 0..4 (or similar) are graphic fonts
// validate x and y ValidX(x);
if (x > MtxOrb->wid) ValidY(y);
x = MtxOrb->wid;
if (x < 1)
x = 1;
if (y > MtxOrb->hgt)
y = MtxOrb->hgt;
if (y < 1)
y = 1;
// write immediately to screen... this code was taken // write immediately to screen... this code was taken
// from the LK202-25; should work for others, yes? // from the LK202-25; should work for others, yes?
@@ -787,6 +772,9 @@ MtxOrb_hbar (int x, int y, int len)
unsigned char mapr[6] = { barw, barr1, barr2, barr3, barr4, barb }; unsigned char mapr[6] = { barw, barr1, barr2, barr3, barr4, barb };
unsigned char mapl[6] = { barw, barl1, barl2, barl3, barl4, barb }; unsigned char mapl[6] = { barw, barl1, barl2, barl3, barl4, barb };
ValidX(x);
ValidY(y);
if (len > 0) { if (len > 0) {
for (; x <= MtxOrb->wid && len > 0; x++) { for (; x <= MtxOrb->wid && len > 0; x++) {
if (len >= MtxOrb->cellwid) if (len >= MtxOrb->cellwid)
@@ -930,11 +918,11 @@ MtxOrb_draw_frame (char *dat)
if (!dat) if (!dat)
return; return;
/*
sprintf(out, "%cG%c%c", 254, 1, 1); // sprintf(out, "%cG%c%c", 254, 1, 1);
write(fd, out, 4); // write(fd, out, 4);
write(fd, dat, lcd.wid*lcd.hgt); // write(fd, dat, lcd.wid*lcd.hgt);
*/
for (i = 0; i < MtxOrb->hgt; i++) { for (i = 0; i < MtxOrb->hgt; i++) {
sprintf (out, "\x0FEG\x001%c", i + 1); sprintf (out, "\x0FEG\x001%c", i + 1);
write (fd, out, 4); write (fd, out, 4);