diff --git a/src/sacctmgr/sacctmgr.c b/src/sacctmgr/sacctmgr.c index 3f238f29d894e49b8fc5b38fe8d6d4306a9fa5a7..b49d3d187524500ee6f36bff37a89f8f5781567f 100644 --- a/src/sacctmgr/sacctmgr.c +++ b/src/sacctmgr/sacctmgr.c @@ -254,6 +254,7 @@ static char *_getline(const char *prompt) char buf[4096]; char *line; int len; + printf("%s", prompt); /* Set "line" here to avoid a warning, discard later */ @@ -261,11 +262,13 @@ static char *_getline(const char *prompt) if (line == NULL) return NULL; len = strlen(buf); - if ((len > 0) && (buf[len-1] == '\n')) + if ((len == 0) || (len >= 4096)) + return NULL; + if (buf[len-1] == '\n') buf[len-1] = '\0'; else len++; - line = malloc (len * sizeof(char)); + line = malloc(len * sizeof(char)); if (!line) return NULL; return strncpy(line, buf, len); diff --git a/src/scontrol/scontrol.c b/src/scontrol/scontrol.c index c8596495c4f6844668160fc96a39df5ba4e051f5..260b6b7e595aa7a7c70b3f268b2ef1b4f75e0f15 100644 --- a/src/scontrol/scontrol.c +++ b/src/scontrol/scontrol.c @@ -251,14 +251,16 @@ static char *_getline(const char *prompt) /* Set "line" here to avoid a warning, discard later */ line = fgets(buf, 4096, stdin); + if (line == NULL) + return NULL; len = strlen(buf); - if (len == 0) + if ((len == 0) || (len >= 4096)) return NULL; if (buf[len-1] == '\n') buf[len-1] = '\0'; else len++; - line = malloc (len * sizeof(char)); + line = malloc(len * sizeof(char)); if (!line) return NULL; return strncpy(line, buf, len); diff --git a/src/sreport/sreport.c b/src/sreport/sreport.c index f93e53754d852f070ebb0050694c3f5c0c5ce4f7..2c9607a2a7a670330e02b2f526295b101c925832 100644 --- a/src/sreport/sreport.c +++ b/src/sreport/sreport.c @@ -213,6 +213,7 @@ static char *_getline(const char *prompt) char buf[4096]; char *line; int len; + printf("%s", prompt); /* Set "line" here to avoid a warning, discard later */ @@ -220,11 +221,13 @@ static char *_getline(const char *prompt) if (line == NULL) return NULL; len = strlen(buf); - if ((len > 0) && (buf[len-1] == '\n')) + if ((len == 0) || (len >= 4096)) + return NULL; + if (buf[len-1] == '\n') buf[len-1] = '\0'; else len++; - line = malloc (len * sizeof(char)); + line = malloc(len * sizeof(char)); if (!line) return NULL; return strncpy(line, buf, len);