diff options
| author | Theo Buehler <tb@openbsd.org> | 2026-06-26 10:13:03 +0200 |
|---|---|---|
| committer | Theo Buehler <tb@openbsd.org> | 2026-06-26 10:13:03 +0200 |
| commit | 4af7f675cb1fdd4a8e91eb115a89e0fee628be4e (patch) | |
| tree | cc67ed627a159cd020ceec50578c49fc787befcd | |
| parent | dfd60ca03d078effa4769d0bda655c959c7b2374 (diff) | |
| parent | 8c8af254aa0d8ed50a4d99fe8c60450819f2cbf3 (diff) | |
| download | portable-4af7f675cb1fdd4a8e91eb115a89e0fee628be4e.tar.gz portable-4af7f675cb1fdd4a8e91eb115a89e0fee628be4e.tar.bz2 portable-4af7f675cb1fdd4a8e91eb115a89e0fee628be4e.zip | |
Land #1309 - fix getdelim corner case
| -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; |
