mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 11:10:54 +03:00
fix(console): Fix security code review findings
This commit is contained in:
@@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user