From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> el_gets returns NULL if it fails to read any characters (due to EOF or errors occurred). strdup will crash if it is fed a NULL string, so check the return value to avoid segfaulting. Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --- libxcmd/input.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/libxcmd/input.c b/libxcmd/input.c index 137856e3..a4548d7c 100644 --- a/libxcmd/input.c +++ b/libxcmd/input.c @@ -47,6 +47,7 @@ fetchline(void) static EditLine *el; static History *hist; HistEvent hevent; + const char *cmd; char *line; int count; @@ -59,13 +60,18 @@ fetchline(void) el_set(el, EL_PROMPT, el_get_prompt); el_set(el, EL_HIST, history, (const char *)hist); } - line = strdup(el_gets(el, &count)); - if (line) { - if (count > 0) - line[count-1] = '\0'; - if (*line) - history(hist, &hevent, H_ENTER, line); - } + cmd = el_gets(el, &count); + if (!cmd) + return NULL; + + line = strdup(cmd); + if (!line) + return NULL; + + if (count > 0) + line[count-1] = '\0'; + if (*line) + history(hist, &hevent, H_ENTER, line); return line; } #else