]> git.draconx.ca Git - upkg.git/commitdiff
Fix pointer signedness issues in libupkg.
authorNick Bowler <nbowler@draconx.ca>
Fri, 3 Jul 2009 19:03:38 +0000 (15:03 -0400)
committerNick Bowler <nbowler@draconx.ca>
Fri, 3 Jul 2009 19:03:38 +0000 (15:03 -0400)
src/libupkg.c

index 4bb13a3fa7b0f85c55197ead75af52ebc9f77795..8e5de38dd87c5e1926befddd7c1b19c5beded805 100644 (file)
@@ -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;
 }