summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoerg <joerg>2008-11-27 19:24:13 +0000
committerjoerg <joerg>2008-11-27 19:24:13 +0000
commit853b8915d974d3e67e0bce1b552f0a6ea002f9c2 (patch)
tree851c15ad0f92da64996506742aaea886e7501f74
parent34db139f3acc04a28c019abe9d721dfc618b9dd6 (diff)
downloadpkgsrc-853b8915d974d3e67e0bce1b552f0a6ea002f9c2.tar.gz
pkg_install-20081127:
Correctly deal with short reads from fetchIO_read when loading pkg-vulnerabilities.
-rw-r--r--pkgtools/pkg_install/files/admin/audit.c25
-rw-r--r--pkgtools/pkg_install/files/lib/version.h4
2 files changed, 20 insertions, 9 deletions
diff --git a/pkgtools/pkg_install/files/admin/audit.c b/pkgtools/pkg_install/files/admin/audit.c
index 72b9716006b..b421703a610 100644
--- a/pkgtools/pkg_install/files/admin/audit.c
+++ b/pkgtools/pkg_install/files/admin/audit.c
@@ -1,4 +1,4 @@
-/* $NetBSD: audit.c,v 1.8.2.5 2008/10/02 20:51:41 joerg Exp $ */
+/* $NetBSD: audit.c,v 1.8.2.6 2008/11/27 19:24:13 joerg Exp $ */
#if HAVE_CONFIG_H
#include "config.h"
@@ -8,7 +8,7 @@
#include <sys/cdefs.h>
#endif
#ifndef lint
-__RCSID("$NetBSD: audit.c,v 1.8.2.5 2008/10/02 20:51:41 joerg Exp $");
+__RCSID("$NetBSD: audit.c,v 1.8.2.6 2008/11/27 19:24:13 joerg Exp $");
#endif
/*-
@@ -343,7 +343,8 @@ fetch_pkg_vulnerabilities(int argc, char **argv)
{
struct pkg_vulnerabilities *pv_check;
char *buf, *decompressed_input;
- size_t buf_len, decompressed_len;
+ size_t buf_len, buf_fetched, decompressed_len;
+ ssize_t cur_fetched;
struct url_stat st;
fetchIO *f;
int fd;
@@ -365,11 +366,21 @@ fetch_pkg_vulnerabilities(int argc, char **argv)
buf_len = st.size;
buf = xmalloc(buf_len + 1);
+ buf_fetched = 0;
- if (fetchIO_read(f, buf, buf_len) != buf_len)
- errx(EXIT_FAILURE,
- "Failure during fetch of pkg-vulnerabilities: %s",
- fetchLastErrString);
+ while (buf_fetched < buf_len) {
+ cur_fetched = fetchIO_read(f, buf + buf_fetched,
+ buf_len - buf_fetched);
+ if (cur_fetched == 0)
+ errx(EXIT_FAILURE,
+ "Truncated pkg-vulnerabilities received");
+ else if (cur_fetched == -1)
+ errx(EXIT_FAILURE,
+ "IO error while fetching pkg-vulnerabilities: %s",
+ fetchLastErrString);
+ buf_fetched += cur_fetched;
+ }
+
buf[buf_len] = '\0';
if (decompress_buffer(buf, buf_len, &decompressed_input,
diff --git a/pkgtools/pkg_install/files/lib/version.h b/pkgtools/pkg_install/files/lib/version.h
index 011fd41632c..19469e266d8 100644
--- a/pkgtools/pkg_install/files/lib/version.h
+++ b/pkgtools/pkg_install/files/lib/version.h
@@ -1,4 +1,4 @@
-/* $NetBSD: version.h,v 1.102.2.17 2008/10/02 20:51:41 joerg Exp $ */
+/* $NetBSD: version.h,v 1.102.2.18 2008/11/27 19:24:13 joerg Exp $ */
/*
* Copyright (c) 2001 Thomas Klausner. All rights reserved.
@@ -27,6 +27,6 @@
#ifndef _INST_LIB_VERSION_H_
#define _INST_LIB_VERSION_H_
-#define PKGTOOLS_VERSION "20081003"
+#define PKGTOOLS_VERSION "20081127"
#endif /* _INST_LIB_VERSION_H_ */