diff options
author | Pádraig Brady <P@draigBrady.com> | 2018-06-24 01:46:10 -0700 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2018-06-24 13:53:45 -0700 |
commit | 20c918561e6af48b03f3dbaa7553dfd688fd9732 (patch) | |
tree | edf1b79a60ea7e3fd7c41843728fc1ec45c9f683 /lib/md5.c | |
parent | 4208523235711502ad50692ff8cc2014f3b568e5 (diff) | |
download | gnulib-20c918561e6af48b03f3dbaa7553dfd688fd9732.tar.gz |
af_alg: avoid hangs when reading from streams
* lib/af_alg.c (afalg_stream): Don't assume EOF is sticky,
and thus avoid doing a fread() when feof() is set.
* lib/md5.c: Ensure feof() is called before fread().
* lib/sha1.c: Likewise.
* lib/sha256.c: Likewise.
* lib/sha512.c: Likewise.
Diffstat (limited to 'lib/md5.c')
-rw-r--r-- | lib/md5.c | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -170,6 +170,12 @@ md5_stream (FILE *stream, void *resblock) /* Read block. Take care for partial reads. */ while (1) { + /* Either process a partial fread() from this loop, + or the fread() in afalg_stream may have gotten EOF. + We need to avoid a subsequent fread() due to glibc BZ 1190. */ + if (feof (stream)) + goto process_partial_block; + n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); sum += n; @@ -189,12 +195,6 @@ md5_stream (FILE *stream, void *resblock) } goto process_partial_block; } - - /* We've read at least one byte, so ignore errors. But always - check for EOF, since feof may be true even though N > 0. - Otherwise, we could end up calling fread after EOF. */ - if (feof (stream)) - goto process_partial_block; } /* Process buffer with BLOCKSIZE bytes. Note that |