fix(console): Fix security code review findings

This commit is contained in:
Guillaume Souchere
2026-08-28 08:33:15 +02:00
parent 5e8921d589
commit 153bb926fc
2 changed files with 20 additions and 5 deletions
+4
View File
@@ -134,6 +134,7 @@ esp_err_t esp_console_cmd_register(const esp_console_cmd_t *cmd)
} else { } else {
// remove from list and free the old hint, because we will alloc new hint for the command // remove from list and free the old hint, because we will alloc new hint for the command
esp_console_rm_item_free_hint(item); esp_console_rm_item_free_hint(item);
item->hint = NULL;
} }
item->command = cmd->command; item->command = cmd->command;
item->help = cmd->help; item->help = cmd->help;
@@ -382,8 +383,11 @@ esp_err_t esp_console_register_help_command(void)
esp_err_t esp_console_deregister_help_command(void) esp_err_t esp_console_deregister_help_command(void)
{ {
free(help_args.help_cmd); free(help_args.help_cmd);
help_args.help_cmd = NULL;
free(help_args.verbose_level); free(help_args.verbose_level);
help_args.verbose_level = NULL;
free(help_args.end); free(help_args.end);
help_args.end = NULL;
return esp_console_cmd_deregister("help"); return esp_console_cmd_deregister("help");
} }
+16 -5
View File
@@ -354,7 +354,7 @@ static int getColumns(void) {
/* After sending this command, we can get the new position of the cursor, /* After sending this command, we can get the new position of the cursor,
* we'd get the size, in columns, of the opened TTY. */ * we'd get the size, in columns, of the opened TTY. */
cols = getCursorPosition(); cols = getCursorPosition();
if (cols == -1) { if (cols <= 0) {
goto failed; goto failed;
} }
@@ -565,6 +565,9 @@ void refreshShowHints(struct abuf *ab, struct linenoiseState *l, int plen) {
* Rewrite the currently edited line accordingly to the buffer content, * Rewrite the currently edited line accordingly to the buffer content,
* cursor position, and number of columns of the terminal. */ * cursor position, and number of columns of the terminal. */
static void refreshSingleLine(struct linenoiseState *l) { static void refreshSingleLine(struct linenoiseState *l) {
if (l->cols == 0) {
l->cols = 80;
}
char seq[64]; char seq[64];
size_t plen = l->plen; size_t plen = l->plen;
int fd = fileno(stdout); int fd = fileno(stdout);
@@ -607,6 +610,9 @@ static void refreshSingleLine(struct linenoiseState *l) {
* Rewrite the currently edited line accordingly to the buffer content, * Rewrite the currently edited line accordingly to the buffer content,
* cursor position, and number of columns of the terminal. */ * cursor position, and number of columns of the terminal. */
static void refreshMultiLine(struct linenoiseState *l) { static void refreshMultiLine(struct linenoiseState *l) {
if (l->cols == 0) {
l->cols = 80;
}
char seq[64]; char seq[64];
int plen = l->plen; int plen = l->plen;
int rows = (plen+l->len+l->cols-1)/l->cols; /* rows used by current buf. */ int rows = (plen+l->len+l->cols-1)/l->cols; /* rows used by current buf. */
@@ -891,6 +897,9 @@ static int linenoiseEdit(char *buf, size_t buflen, const char *prompt)
l.oldpos = l.pos = 0; l.oldpos = l.pos = 0;
l.len = 0; l.len = 0;
l.cols = getColumns(); l.cols = getColumns();
if (l.cols == 0) {
l.cols = 80;
}
l.maxrows = 0; l.maxrows = 0;
l.history_index = 0; l.history_index = 0;
@@ -1171,14 +1180,15 @@ static int linenoiseDumb(char* buf, size_t buflen, const char* prompt) {
flushWrite(); flushWrite();
size_t count = 0; size_t count = 0;
int nread = 0;
const int in_fd = fileno(stdin); const int in_fd = fileno(stdin);
char c = 'c'; char c = 'c';
while (count < buflen) { while (count + 1 < buflen) {
int nread = read_func(in_fd, &c, 1); nread = read_func(in_fd, &c, 1);
if (nread < 0) { if (nread < 0) {
return nread; break;
} }
if (c == '\n') { if (c == '\n') {
break; break;
@@ -1206,9 +1216,10 @@ static int linenoiseDumb(char* buf, size_t buflen, const char* prompt) {
fputc(c, stdout); /* echo */ fputc(c, stdout); /* echo */
flushWrite(); flushWrite();
} }
buf[count] = '\0';
fputc('\n', stdout); fputc('\n', stdout);
flushWrite(); flushWrite();
return count; return nread < 0 ? nread : (int)count;
} }
static void sanitize(char* src) { static void sanitize(char* src) {