fix logic error in fread
fread was calling f->read without checking that the file was in reading mode. this could: 1. crash, if f->read was a null pointer 2. cause unwanted blocking on a terminal already at eof 3. allow reading on a write-only file
This commit is contained in:
parent
47d027ee1a
commit
94a0171d80
1 changed files with 1 additions and 6 deletions
|
|
@ -21,14 +21,9 @@ size_t fread(void *destv, size_t size, size_t nmemb, FILE *f)
|
||||||
l -= k;
|
l -= k;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!l) {
|
|
||||||
FUNLOCK(f);
|
|
||||||
return nmemb;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read the remainder directly */
|
/* Read the remainder directly */
|
||||||
for (; l; l-=k, dest+=k) {
|
for (; l; l-=k, dest+=k) {
|
||||||
k = f->read(f, dest, l);
|
k = __toread(f) ? 0 : f->read(f, dest, l);
|
||||||
if (k+1<=1) {
|
if (k+1<=1) {
|
||||||
FUNLOCK(f);
|
FUNLOCK(f);
|
||||||
return (len-l)/size;
|
return (len-l)/size;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue