{
size_t rc, len, nbuf = 0;
unsigned long index = 0;
- char buf[512];
+ unsigned char buf[512];
if (fseek(pkg->priv->f, pkg->priv->name_offset, SEEK_SET) != 0)
return -1;
memmove(buf, buf+len+1, nbuf);
index++;
} else {
- char *c = memchr(buf, 0, nbuf);
+ unsigned char *c = memchr(buf, 0, nbuf);
if (!c || nbuf <= c - buf + 5)
goto err;
len = c - buf + 1;
{
size_t rc, len, nbuf = 0;
unsigned long index = 0;
- char buf[512];
+ unsigned char buf[512];
if (fseek(pkg->priv->f, pkg->priv->export_offset, SEEK_SET) != 0)
return -1;
export->flags = unpack_32_le(buf+len);
len += 4;
- rc = upkg_decode_index(&export->size, buf+len, nbuf-len);
- if (rc == 0) goto err;
+ rc = upkg_decode_index(&tmp, buf+len, nbuf-len);
+ if (rc == 0 || tmp < 0) goto err;
+ export->size = tmp;
len += rc;
if (export->size) {
- rc = upkg_decode_index(&export->offset, buf+len, nbuf-len);
- if (rc == 0) goto err;
+ rc = upkg_decode_index(&tmp, buf+len, nbuf-len);
+ if (rc == 0 || tmp < 0) goto err;
+ export->offset = tmp;
len += rc;
}
{
size_t rc, len, nbuf = 0;
unsigned long index = 0;
- char buf[512];
+ unsigned char buf[512];
if (fseek(pkg->priv->f, pkg->priv->import_offset, SEEK_SET) != 0)
return -1;
rc = fread(buf, 1, want, f->pkg->priv->f);
f->offset += rc;
- if (want < n || rc < want && feof(f->pkg->priv->f))
+ if (want < n || (rc < want && feof(f->pkg->priv->f)))
f->eof = 1;
return rc;
}