diff options
author | Paul LeoNerd Evans <leonerd@leonerd.org.uk> | 2012-09-29 12:22:43 +0100 |
---|---|---|
committer | Paul LeoNerd Evans <leonerd@leonerd.org.uk> | 2012-09-29 12:22:43 +0100 |
commit | 2be3b0b4301bc4456e9f56e41636ae3bad99b64d (patch) | |
tree | ef0ec0b0bba0f4a22bbc2f65d2c10c8659f97698 | |
parent | c8f2f0acd1650ecf226237e41ea1df88f4fee652 (diff) |
vterm_screen_get_cell() should return int to indicate bounds-checking failure
-rw-r--r-- | include/vterm.h | 2 | ||||
-rw-r--r-- | src/screen.c | 6 | ||||
-rw-r--r-- | t/harness.c | 3 |
3 files changed, 7 insertions, 4 deletions
diff --git a/include/vterm.h b/include/vterm.h index 191edec..90507d3 100644 --- a/include/vterm.h +++ b/include/vterm.h @@ -213,7 +213,7 @@ typedef struct { VTermColor fg, bg; } VTermScreenCell; -void vterm_screen_get_cell(VTermScreen *screen, VTermPos pos, VTermScreenCell *cell); +int vterm_screen_get_cell(VTermScreen *screen, VTermPos pos, VTermScreenCell *cell); int vterm_screen_is_eol(VTermScreen *screen, VTermPos pos); diff --git a/src/screen.c b/src/screen.c index 994c645..1fdb793 100644 --- a/src/screen.c +++ b/src/screen.c @@ -620,11 +620,11 @@ size_t vterm_screen_get_text(VTermScreen *screen, char *str, size_t len, const V } /* Copy internal to external representation of a screen cell */ -void vterm_screen_get_cell(VTermScreen *screen, VTermPos pos, VTermScreenCell *cell) +int vterm_screen_get_cell(VTermScreen *screen, VTermPos pos, VTermScreenCell *cell) { ScreenCell *intcell = getcell(screen, pos.row, pos.col); if(!intcell) - return; + return 0; for(int i = 0; ; i++) { cell->chars[i] = intcell->chars[i]; @@ -648,6 +648,8 @@ void vterm_screen_get_cell(VTermScreen *screen, VTermPos pos, VTermScreenCell *c cell->width = 2; else cell->width = 1; + + return 1; } int vterm_screen_is_eol(VTermScreen *screen, VTermPos pos) diff --git a/t/harness.c b/t/harness.c index a8b6dcd..08580e2 100644 --- a/t/harness.c +++ b/t/harness.c @@ -715,7 +715,8 @@ int main(int argc, char **argv) goto abort_line; } VTermScreenCell cell; - vterm_screen_get_cell(screen, pos, &cell); + if(!vterm_screen_get_cell(screen, pos, &cell)) + goto abort_line; printf("{"); for(int i = 0; cell.chars[i] && i < VTERM_MAX_CHARS_PER_CELL; i++) { printf("%s0x%x", i ? "," : "", cell.chars[i]); |