From: Nick Bowler Date: Sat, 6 Jun 2009 01:29:53 +0000 (-0400) Subject: Implement parsing of old format name tables. X-Git-Url: https://git.draconx.ca/gitweb/upkg.git/commitdiff_plain/34b6da11a1cee30f1fcff4e713f2c881ea32aead Implement parsing of old format name tables. --- diff --git a/libupkg.c b/libupkg.c index 85767a2..a9ddea0 100644 --- a/libupkg.c +++ b/libupkg.c @@ -134,13 +134,26 @@ static int pkg_init_names(struct upkg *pkg) goto err; memcpy(name->name, buf+1, len); name->flags = unpack_32_le(buf+len+1); + len += 4; - nbuf -= len + 5; - memmove(buf, buf+len+5, nbuf); + nbuf -= len + 1; + memmove(buf, buf+len+1, nbuf); index++; } else { - /* TODO */ - abort(); + char *c = memchr(buf, 0, nbuf); + if (!c || nbuf <= c - buf + 5) + goto err; + len = c - buf + 1; + name->name = malloc(len); + if (!name->name) + goto err; + memcpy(name->name, buf, len); + name->flags = unpack_32_le(buf+len); + len += 4; + + nbuf -= len; + memmove(buf, buf+len, nbuf); + index++; } }