On 5/18/20 7:52 PM, Darrick J. Wong wrote: > 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> Reviewed-by: Eric Sandeen <sandeen@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(); >