From d4361f57c265eb4793ceffb045687727ee619678 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Fri, 3 Jul 2009 15:03:38 -0400 Subject: [PATCH] Fix pointer signedness issues in libupkg. --- src/libupkg.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/libupkg.c b/src/libupkg.c index 4bb13a3..8e5de38 100644 --- a/src/libupkg.c +++ b/src/libupkg.c @@ -156,7 +156,7 @@ static int pkg_init_names(struct upkg *pkg) { 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; @@ -191,7 +191,7 @@ static int pkg_init_names(struct upkg *pkg) 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; @@ -220,7 +220,7 @@ static int pkg_init_exports(struct upkg *pkg) { 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; @@ -263,13 +263,15 @@ static int pkg_init_exports(struct upkg *pkg) 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; } @@ -288,7 +290,7 @@ static int pkg_init_imports(struct upkg *pkg) { 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; @@ -502,7 +504,7 @@ size_t upkg_export_read(struct upkg_file *f, void *buf, size_t n) 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; } -- 2.43.2