diff options
Diffstat (limited to 'Src')
-rw-r--r-- | Src/exec.c | 8 | ||||
-rw-r--r-- | Src/lex.c | 10 |
2 files changed, 17 insertions, 1 deletions
diff --git a/Src/exec.c b/Src/exec.c index ccba66bf8..7e4b55d43 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -3111,7 +3111,13 @@ gethere(char *str, int typ) ; for (;;) { if (bptr == buf + bsiz) { - buf = realloc(buf, 2 * bsiz); + char *newbuf = realloc(buf, 2 * bsiz); + if (!newbuf) { + /* out of memory */ + zfree(buf, bsiz); + return NULL; + } + buf = newbuf; t = buf + bsiz - (bptr - t); bptr = buf + bsiz; bsiz *= 2; diff --git a/Src/lex.c b/Src/lex.c index 7748bedad..776eaf95a 100644 --- a/Src/lex.c +++ b/Src/lex.c @@ -356,6 +356,16 @@ yylex(void) ALLOWHIST cmdpop(); hwend(); + if (!name) { + zerr("here document too large"); + while (hdocs) { + next = hdocs->next; + zfree(hdocs, sizeof(struct heredocs)); + hdocs = next; + } + tok = LEXERR; + break; + } setheredoc(hdocs->pc, REDIR_HERESTR, name); zfree(hdocs, sizeof(struct heredocs)); hdocs = next; |