提交 f81279ff 编写于 作者: R Rich Felker

fmemopen fixes

disallow seek past end of buffer (per posix)
fix position accounting to include data buffered for read
don't set eof flag when no data was requested
上级 7ee3dcb3
......@@ -16,7 +16,7 @@ fail:
return -1;
}
base = (size_t [3]){0, c->pos, c->len}[whence];
if (off < -base || off > SSIZE_MAX-base) goto fail;
if (off < -base || off > (ssize_t)c->size-base) goto fail;
return c->pos = base+off;
}
......@@ -24,6 +24,7 @@ static size_t mread(FILE *f, unsigned char *buf, size_t len)
{
struct cookie *c = f->cookie;
size_t rem = c->size - c->pos;
if (!len) return 0;
if (len > rem) len = rem;
memcpy(buf, c->buf+c->pos, len);
c->pos += len;
......@@ -32,6 +33,7 @@ static size_t mread(FILE *f, unsigned char *buf, size_t len)
f->rpos = f->buf;
f->rend = f->buf + rem;
memcpy(f->rpos, c->buf+c->pos, rem);
c->pos += rem;
if (!len) f->flags |= F_EOF;
return len;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册