From 34b6da11a1cee30f1fcff4e713f2c881ea32aead Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Fri, 5 Jun 2009 21:29:53 -0400 Subject: [PATCH] Implement parsing of old format name tables. --- libupkg.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) 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++; } } -- 2.43.2