mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2026-05-05 12:26:52 +02:00
main/apk-tools: fix from upstream for corruption of big files
This commit is contained in:
parent
de25f1da2b
commit
f5833c656a
@ -0,0 +1,76 @@
|
||||
From 67108bf07a67811ea91fc965f3f1592a4a70044e Mon Sep 17 00:00:00 2001
|
||||
From: Timo Teras <timo.teras@iki.fi>
|
||||
Date: Fri, 31 Jul 2009 10:50:15 +0300
|
||||
Subject: [PATCH] io: fix corruption of big files on mmap write
|
||||
|
||||
remember to increment destination pointer; and munmap the proper
|
||||
base address.
|
||||
---
|
||||
src/io.c | 27 +++++++++++++--------------
|
||||
1 files changed, 13 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/src/io.c b/src/io.c
|
||||
index 18e89d3..3929ba1 100644
|
||||
--- a/src/io.c
|
||||
+++ b/src/io.c
|
||||
@@ -114,21 +114,19 @@ size_t apk_istream_splice(void *stream, int fd, size_t size,
|
||||
{
|
||||
static void *splice_buffer = NULL;
|
||||
struct apk_istream *is = (struct apk_istream *) stream;
|
||||
- unsigned char *buf = MAP_FAILED;
|
||||
- size_t bufsz, done = 0, r, togo, mmapped = 0;
|
||||
+ unsigned char *buf, *mmapbase = MAP_FAILED;
|
||||
+ size_t bufsz, done = 0, r, togo;
|
||||
|
||||
bufsz = size;
|
||||
if (size > 128 * 1024) {
|
||||
if (ftruncate(fd, size) == 0)
|
||||
- buf = mmap(NULL, size, PROT_READ | PROT_WRITE,
|
||||
- MAP_SHARED, fd, 0);
|
||||
- if (buf != MAP_FAILED) {
|
||||
- mmapped = 1;
|
||||
- if (bufsz > 2*1024*1024)
|
||||
- bufsz = 2*1024*1024;
|
||||
- }
|
||||
+ mmapbase = mmap(NULL, size, PROT_READ | PROT_WRITE,
|
||||
+ MAP_SHARED, fd, 0);
|
||||
+ if (bufsz > 2*1024*1024)
|
||||
+ bufsz = 2*1024*1024;
|
||||
+ buf = mmapbase;
|
||||
}
|
||||
- if (!mmapped) {
|
||||
+ if (mmapbase == MAP_FAILED) {
|
||||
if (splice_buffer == NULL)
|
||||
splice_buffer = malloc(256*1024);
|
||||
buf = splice_buffer;
|
||||
@@ -149,13 +147,14 @@ size_t apk_istream_splice(void *stream, int fd, size_t size,
|
||||
if (r < 0)
|
||||
goto err;
|
||||
|
||||
- if (!mmapped) {
|
||||
+ if (mmapbase == MAP_FAILED) {
|
||||
if (write(fd, buf, r) != r) {
|
||||
if (r < 0)
|
||||
r = -errno;
|
||||
goto err;
|
||||
}
|
||||
- }
|
||||
+ } else
|
||||
+ buf += r;
|
||||
|
||||
done += r;
|
||||
if (r != togo)
|
||||
@@ -163,8 +162,8 @@ size_t apk_istream_splice(void *stream, int fd, size_t size,
|
||||
}
|
||||
r = done;
|
||||
err:
|
||||
- if (mmapped)
|
||||
- munmap(buf, size);
|
||||
+ if (mmapbase != MAP_FAILED)
|
||||
+ munmap(mmapbase, size);
|
||||
return r;
|
||||
}
|
||||
|
||||
--
|
||||
1.6.3.3
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
|
||||
pkgname=apk-tools
|
||||
pkgver=2.0_pre17
|
||||
pkgrel=1
|
||||
pkgrel=2
|
||||
pkgdesc="Alpine Package Keeper - package manager for alpine"
|
||||
depends=
|
||||
makedepends="zlib-dev openssl-dev pkgconfig"
|
||||
source="http://git.alpinelinux.org/cgit/$pkgname/snapshot/$pkgname-$pkgver.tar.bz2
|
||||
0001-db-fix-checksum-storing-to-db.patch
|
||||
0001-io-fix-corruption-of-big-files-on-mmap-write.patch
|
||||
"
|
||||
|
||||
|
||||
@ -17,6 +18,8 @@ build() {
|
||||
cd "$srcdir/$pkgname-$pkgver"
|
||||
sed -i -e 's:-Werror::' Make.rules
|
||||
patch -p1 -i ../0001-db-fix-checksum-storing-to-db.patch || return 1
|
||||
patch -p1 -i ../0001-io-fix-corruption-of-big-files-on-mmap-write.patch\
|
||||
|| return 1
|
||||
|
||||
make || return 1
|
||||
make DESTDIR="$pkgdir" install
|
||||
@ -30,4 +33,5 @@ build() {
|
||||
}
|
||||
|
||||
md5sums="4d31c9ae51b357a8514e99a8750af0b6 apk-tools-2.0_pre17.tar.bz2
|
||||
d7944308cefe6f5fc45a24e1840d087e 0001-db-fix-checksum-storing-to-db.patch"
|
||||
d7944308cefe6f5fc45a24e1840d087e 0001-db-fix-checksum-storing-to-db.patch
|
||||
57693255bb36abe74423578b83ff2cf4 0001-io-fix-corruption-of-big-files-on-mmap-write.patch"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user