Commit 6185b4b4 authored by Natanael Copa's avatar Natanael Copa

main/apk-tools: fix segfault for info --exist

and remove unused patches
parent af3ef82a
From c1fe6d08f3ba77bf13b098216fc5e5bcd4ba23f7 Mon Sep 17 00:00:00 2001
From: Timo Teras <timo.teras@iki.fi>
Date: Thu, 30 Jul 2009 11:55:59 +0300
Subject: [PATCH] db: fix checksum storing to db
also take precautions in audit code if the db is missing the
checksum.
---
src/audit.c | 7 +++----
src/database.c | 8 ++++++--
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/src/audit.c b/src/audit.c
index 31965df..76bd492 100644
--- a/src/audit.c
+++ b/src/audit.c
@@ -69,10 +69,9 @@ static int audit_directory(apk_hash_item item, void *ctx)
} else {
dbf = apk_db_file_query(db, bdir, APK_BLOB_STR(de->d_name));
if (dbf != NULL) {
- if (apk_file_get_info(tmp, dbf->csum.type, &fi) < 0)
- continue;
-
- if (apk_checksum_compare(&fi.csum, &dbf->csum) == 0)
+ if (dbf->csum.type != APK_CHECKSUM_NONE &&
+ apk_file_get_info(tmp, dbf->csum.type, &fi) == 0 &&
+ apk_checksum_compare(&fi.csum, &dbf->csum) == 0)
continue;
reason = 'U';
diff --git a/src/database.c b/src/database.c
index 968d55e..16ae94b 100644
--- a/src/database.c
+++ b/src/database.c
@@ -1458,6 +1458,7 @@ static int apk_db_install_archive_entry(void *_ctx,
diri->dir->name, file->name);
r = apk_archive_entry_extract(ae, is, alt_name,
extract_cb, ctx);
+ memcpy(&file->csum, &ae->csum, sizeof(file->csum));
} else {
if (apk_verbosity >= 3)
apk_message("%s", ae->name);
@@ -1502,7 +1503,8 @@ static void apk_db_purge_pkg(struct apk_database *db, struct apk_package *pkg,
hash = apk_blob_hash_seed(key.filename, diri->dir->hash);
if (!(diri->dir->flags & APK_DBDIRF_PROTECTED) ||
(apk_flags & APK_PURGE) ||
- (apk_file_get_info(name, file->csum.type, &fi) == 0 &&
+ (file->csum.type != APK_CHECKSUM_NONE &&
+ apk_file_get_info(name, file->csum.type, &fi) == 0 &&
apk_checksum_compare(&file->csum, &fi.csum) == 0))
unlink(name);
if (apk_verbosity >= 3)
@@ -1565,6 +1567,7 @@ static void apk_db_migrate_files(struct apk_database *db,
if ((diri->dir->flags & APK_DBDIRF_PROTECTED) &&
(r == 0) &&
(ofile == NULL ||
+ ofile->csum.type == APK_CHECKSUM_NONE ||
apk_checksum_compare(&ofile->csum, &fi.csum) != 0)) {
/* Protected directory, with file without
* db entry, or local modifications.
@@ -1575,7 +1578,8 @@ static void apk_db_migrate_files(struct apk_database *db,
ofile->csum.type != file->csum.type)
apk_file_get_info(name, file->csum.type, &fi);
if ((apk_flags & APK_CLEAN_PROTECTED) ||
- apk_checksum_compare(&file->csum, &fi.csum) == 0)
+ (file->csum.type != APK_CHECKSUM_NONE &&
+ apk_checksum_compare(&file->csum, &fi.csum) == 0))
unlink(tmpname);
} else {
/* Overwrite the old file */
--
1.6.3.3
From 2cfca5b6ed658433419f9b581b3ba30f34c973c4 Mon Sep 17 00:00:00 2001
From: Timo Teras <timo.teras@iki.fi>
Date: Wed, 5 Aug 2009 19:10:54 +0300
Subject: [PATCH] info: fix a --exists to work if the name is non-existant
---
src/info.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/src/info.c b/src/info.c
index a222b8c..073dc80 100644
--- a/src/info.c
+++ b/src/info.c
@@ -94,6 +94,9 @@ static int info_exists(struct info_ctx *ctx, struct apk_database *db,
continue;
name = dep.name;
+ if (name->pkgs == NULL)
+ continue;
+
for (j = 0; j < name->pkgs->num; j++) {
pkg = name->pkgs->item[j];
if (apk_pkg_get_state(pkg) == APK_PKG_INSTALLED)
--
1.6.3.3
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
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=apk-tools
pkgver=2.0_rc1
pkgrel=0
pkgrel=1
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-fix-a-exists-to-work-if-the-name-is-non-existan.patch
"
......@@ -16,6 +17,7 @@ license=GPL-2
build() {
cd "$srcdir/$pkgname-$pkgver"
sed -i -e 's:-Werror::' Make.rules
patch -p1 -i ../0001-info-fix-a-exists-to-work-if-the-name-is-non-existan.patch || return 1
make || return 1
make static || return 1
......@@ -35,4 +37,5 @@ static() {
"$subpkgdir"/sbin/apk.static
}
md5sums="f790182792a41841e6932ae0b6737a43 apk-tools-2.0_rc1.tar.bz2"
md5sums="f790182792a41841e6932ae0b6737a43 apk-tools-2.0_rc1.tar.bz2
87dd230bf89f429db06dcad96be235c0 0001-info-fix-a-exists-to-work-if-the-name-is-non-existan.patch"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment