AmendHub

Download:

jcs

/

subtext

/

amendments

/

649

console: Minor safety fixes


jcs made amendment 649 1 day ago
--- console.c Sat Dec 6 21:14:53 2025 +++ console.c Tue Sep 22 15:44:22 2026 @@ -76,19 +76,6 @@ console_init(void) if (console == NULL) return NULL; - console->session = session_create("console", "console", - &console_node_funcs); - if (console->session == NULL) { - xfree(&console); - warn("No free nodes for a console"); - return NULL; - } - - strlcpy(console->session->location, "Console", - sizeof(console->session->location)); - strlcpy(console->session->log.location, console->session->location, - sizeof(console->session->log.location)); - memset(console->chars, ' ', sizeof(console->chars)); console->ncolumns = DEFAULT_TERMINAL_COLUMNS; console->nlines = DEFAULT_TERMINAL_LINES; @@ -118,6 +105,7 @@ console_init(void) focusable = xmalloczero(sizeof(struct focusable)); if (focusable == NULL) { + DisposeWindow(console->win); xfree(&console); return NULL; } @@ -128,10 +116,26 @@ console_init(void) focusable->close = console_close; console->focusable = focusable; if (!add_focusable(focusable)) { + xfree(&focusable); + DisposeWindow(console->win); xfree(&console); return NULL; } + console->session = session_create("console", "console", + &console_node_funcs); + if (console->session == NULL) { + warn("No free nodes for a console"); + destroy_focusable(&focusable); + xfree(&console); + return NULL; + } + + strlcpy(console->session->location, "Console", + sizeof(console->session->location)); + strlcpy(console->session->log.location, console->session->location, + sizeof(console->session->log.location)); + console->session->cookie = (void *)console; console->session->vt100 = 1; console->session->tspeed = 19200; @@ -685,7 +689,7 @@ console_parse_csi(struct console *console) break; case 'E': /* CNL - cursor next line */ console->cursor_column = 0; - console->cursor_line = MAX(console->nlines - 1, + console->cursor_line = MIN(console->nlines - 1, console->cursor_line + param1); break; case 'F': /* CPL - cursor previous line */ @@ -747,7 +751,7 @@ console_parse_csi(struct console *console) case 1: /* clear from cursor to beginning of line */ start = (console->cursor_line * console->ncolumns); - count = console->ncolumns - console->cursor_column; + count = console->cursor_column + 1; console_erase_chars(console, start, count); break; case 2: @@ -797,7 +801,7 @@ console_parse_csi(struct console *console) if (param1 < 1) console->cursor_line = 0; else if (param1 > console->nlines) - console->cursor_line = console->nlines; + console->cursor_line = console->nlines - 1; else console->cursor_line = param1 - 1; break;