[PATCH 1/3] xfs_db: don't crash if el_gets returns null

Darrick J. Wong
2020-05-19T00:54:24Z

From: Darrick J. Wong <darrick.wong@oracle.com>

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@oracle.com>
---
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();