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;