From 634c81180ca4ba8bb986f58a5d22e89d18cdc02f Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Wed, 8 Jul 2020 12:27:38 +0200 Subject: [PATCH] abuild-gzsplit: fix handling of pax headers fixes #9999 --- abuild-gzsplit.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/abuild-gzsplit.c b/abuild-gzsplit.c index 0d09f28..9b171eb 100644 --- a/abuild-gzsplit.c +++ b/abuild-gzsplit.c @@ -6,13 +6,23 @@ #include +static int find_section(const char *buf, size_t bufsize, const char *str) { + int len = strlen(str); + const char *p; + + if (len >= bufsize) return 0; + + p = strrchr(buf, '/'); + if (p++ == NULL) p = buf; + return strncmp(p, str, len) == 0; +} + int main(void) { char obuf[8*1024], ibuf[8*1024]; z_stream zs; int r = Z_OK, rc = 1, fd = -1; size_t len; - size_t offset; if (inflateInit2(&zs, 15+32) != Z_OK) goto err; @@ -44,14 +54,9 @@ int main(void) if (fd < 0) { const char *fn; - if (strncmp(obuf, "PaxHeader/", 10) == 0) - offset = 10; - else - offset = 0; - - if (strncmp(obuf + offset, ".SIGN.", 6) == 0) + if (find_section(obuf, len, ".SIGN.")) fn = "signatures.tar.gz"; - else if (strncmp(obuf + offset, ".PKGINFO", 8) == 0) + else if (find_section(obuf, len, ".PKGINFO")) fn = "control.tar.gz"; else if (rc == 1) fn = "data.tar.gz", rc = 2;