diff options
| -rw-r--r-- | crypto/compat/getdelim.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/crypto/compat/getdelim.c b/crypto/compat/getdelim.c index caec3f2..9bacf0c 100644 --- a/crypto/compat/getdelim.c +++ b/crypto/compat/getdelim.c | |||
| @@ -35,13 +35,16 @@ | |||
| 35 | ssize_t | 35 | ssize_t |
| 36 | getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp) | 36 | getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp) |
| 37 | { | 37 | { |
| 38 | char *ptr, *eptr; | 38 | char *ptr, *eptr, *nbuf; |
| 39 | size_t nbufsiz; | ||
| 39 | 40 | ||
| 40 | 41 | ||
| 41 | if (*buf == NULL || *bufsiz == 0) { | 42 | if (*buf == NULL || *bufsiz < 2) { |
| 42 | *bufsiz = BUFSIZ; | 43 | nbufsiz = BUFSIZ; |
| 43 | if ((*buf = malloc(*bufsiz)) == NULL) | 44 | if ((nbuf = realloc(*buf, nbufsiz)) == NULL) |
| 44 | return -1; | 45 | return -1; |
| 46 | *buf = nbuf; | ||
| 47 | *bufsiz = nbufsiz; | ||
| 45 | } | 48 | } |
| 46 | 49 | ||
| 47 | for (ptr = *buf, eptr = *buf + *bufsiz;;) { | 50 | for (ptr = *buf, eptr = *buf + *bufsiz;;) { |
| @@ -62,9 +65,8 @@ getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp) | |||
| 62 | return ptr - *buf; | 65 | return ptr - *buf; |
| 63 | } | 66 | } |
| 64 | if (ptr + 2 >= eptr) { | 67 | if (ptr + 2 >= eptr) { |
| 65 | char *nbuf; | ||
| 66 | size_t nbufsiz = *bufsiz * 2; | ||
| 67 | ssize_t d = ptr - *buf; | 68 | ssize_t d = ptr - *buf; |
| 69 | nbufsiz = *bufsiz * 2; | ||
| 68 | if ((nbuf = realloc(*buf, nbufsiz)) == NULL) | 70 | if ((nbuf = realloc(*buf, nbufsiz)) == NULL) |
| 69 | return -1; | 71 | return -1; |
| 70 | *buf = nbuf; | 72 | *buf = nbuf; |
