summaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/apk-tools/0001-gunzip-fix-ordering-of-boundary-callbacks.patch81
-rw-r--r--main/apk-tools/APKBUILD6
2 files changed, 85 insertions, 2 deletions
diff --git a/main/apk-tools/0001-gunzip-fix-ordering-of-boundary-callbacks.patch b/main/apk-tools/0001-gunzip-fix-ordering-of-boundary-callbacks.patch
new file mode 100644
index 000000000..44711d227
--- /dev/null
+++ b/main/apk-tools/0001-gunzip-fix-ordering-of-boundary-callbacks.patch
@@ -0,0 +1,81 @@
+From f126316c791371bd3dfd7c348b10e93e49f5e2d4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
+Date: Fri, 17 Dec 2010 09:36:19 +0200
+Subject: [PATCH] gunzip: fix ordering of boundary callbacks
+
+The boundary callback should not happen until all the uncompressed
+data has been consumed. This previously seems to have worked
+because normally gzip library returns "no error" instead of the
+"stream end" if we extract exactly the amount of bytes remaining
+in the archive. (Perhaps this was changed in new zlib.) In any
+case, verification was broken with some apks due to this callback
+ordering issue.
+---
+ src/gunzip.c | 32 ++++++++++++++++++++++++--------
+ 1 files changed, 24 insertions(+), 8 deletions(-)
+
+diff --git a/src/gunzip.c b/src/gunzip.c
+index aebaf76..df2bbbb 100644
+--- a/src/gunzip.c
++++ b/src/gunzip.c
+@@ -27,6 +27,7 @@ struct apk_gzip_istream {
+ apk_multipart_cb cb;
+ void *cbctx;
+ void *cbprev;
++ apk_blob_t cbarg;
+ };
+
+ static ssize_t gzi_read(void *stream, void *ptr, size_t size)
+@@ -48,6 +49,18 @@ static ssize_t gzi_read(void *stream, void *ptr, size_t size)
+ gis->zs.next_out = ptr;
+
+ while (gis->zs.avail_out != 0 && gis->err == 0) {
++ if (!APK_BLOB_IS_NULL(gis->cbarg)) {
++ r = gis->cb(gis->cbctx,
++ gis->err ? APK_MPART_END : APK_MPART_BOUNDARY,
++ gis->cbarg);
++ if (r > 0)
++ r = -ECANCELED;
++ if (r != 0) {
++ gis->err = r;
++ goto ret;
++ }
++ gis->cbarg = APK_BLOB_NULL;
++ }
+ if (gis->zs.avail_in == 0) {
+ apk_blob_t blob;
+
+@@ -86,19 +99,22 @@ static ssize_t gzi_read(void *stream, void *ptr, size_t size)
+ gis->zs.avail_in == 0)
+ gis->err = 1;
+ if (gis->cb != NULL) {
++ gis->cbarg = APK_BLOB_PTR_LEN(gis->cbprev, (void *) gis->zs.next_in - gis->cbprev);
++ gis->cbprev = gis->zs.next_in;
++ }
++ /* If we hit end of the bitstream (not end
++ * of just this gzip), we need to do the
++ * callback here, as we won't be called again.
++ * For boundaries it should be postponed to not
++ * be called until next gzip read is started. */
++ if (gis->err) {
+ r = gis->cb(gis->cbctx,
+ gis->err ? APK_MPART_END : APK_MPART_BOUNDARY,
+- APK_BLOB_PTR_LEN(gis->cbprev, (void *) gis->zs.next_in - gis->cbprev));
++ gis->cbarg);
+ if (r > 0)
+ r = -ECANCELED;
+- if (r != 0) {
+- gis->err = r;
+- goto ret;
+- }
+- gis->cbprev = gis->zs.next_in;
+- }
+- if (gis->err)
+ goto ret;
++ }
+ inflateEnd(&gis->zs);
+ if (inflateInit2(&gis->zs, 15+32) != Z_OK)
+ return -ENOMEM;
+--
+1.7.3.4
+
diff --git a/main/apk-tools/APKBUILD b/main/apk-tools/APKBUILD
index 9d594da6b..fcb46815c 100644
--- a/main/apk-tools/APKBUILD
+++ b/main/apk-tools/APKBUILD
@@ -1,13 +1,14 @@
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=apk-tools
pkgver=2.0.7
-pkgrel=3
+pkgrel=4
pkgdesc="Alpine Package Keeper - package manager for alpine"
subpackages="$pkgname-static"
depends=
makedepends="zlib-dev openssl-dev pkgconfig"
source="http://git.alpinelinux.org/cgit/$pkgname/snapshot/$pkgname-$pkgver.tar.bz2
0001-info-return-error-if-owning-package-was-not-found.patch
+ 0001-gunzip-fix-ordering-of-boundary-callbacks.patch
"
url="http://git.alpinelinux.org/cgit/apk-tools/"
@@ -50,4 +51,5 @@ static() {
}
md5sums="3c4591c594f9b2261ab588446a50d183 apk-tools-2.0.7.tar.bz2
-1364d38e784ad6cc04e157665903ef0c 0001-info-return-error-if-owning-package-was-not-found.patch"
+1364d38e784ad6cc04e157665903ef0c 0001-info-return-error-if-owning-package-was-not-found.patch
+e47a96010eafab0b24588a7f6bb2800b 0001-gunzip-fix-ordering-of-boundary-callbacks.patch"