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> --- db/input.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/db/input.c b/db/input.c index 553025bc..448e84b0 100644 --- a/db/input.c +++ b/db/input.c @@ -230,14 +230,21 @@ fetchline(void) } if (inputstacksize == 1) { - line = xstrdup(el_gets(el, &count)); - if (line) { - if (count > 0) - line[count-1] = '\0'; - if (*line) { - history(hist, &hevent, H_ENTER, line); - logprintf("%s", line); - } + const char *cmd; + + cmd = el_gets(el, &count); + if (!cmd) + return NULL; + + line = xstrdup(cmd); + if (!line) + return NULL; + + if (count > 0) + line[count-1] = '\0'; + if (*line) { + history(hist, &hevent, H_ENTER, line); + logprintf("%s", line); } } else { line = fetchline_internal();