From owner-svn-src-all@FreeBSD.ORG Sat Mar 7 01:21:46 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BD9F8106566C; Sat, 7 Mar 2009 01:21:46 +0000 (UTC) (envelope-from kientzle@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AA91A8FC14; Sat, 7 Mar 2009 01:21:46 +0000 (UTC) (envelope-from kientzle@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n271Lkc7034271; Sat, 7 Mar 2009 01:21:46 GMT (envelope-from kientzle@svn.freebsd.org) Received: (from kientzle@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n271LkLJ034266; Sat, 7 Mar 2009 01:21:46 GMT (envelope-from kientzle@svn.freebsd.org) Message-Id: <200903070121.n271LkLJ034266@svn.freebsd.org> From: Tim Kientzle Date: Sat, 7 Mar 2009 01:21:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r189472 - in head/lib/libarchive: . test X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Mar 2009 01:21:47 -0000 Author: kientzle Date: Sat Mar 7 01:21:46 2009 New Revision: 189472 URL: http://svn.freebsd.org/changeset/base/189472 Log: Merge r714,r715 from libarchive.googlecode.com: Fix Debian bug #516577. Don't crash if client does not provide a skip function. Extend one of the test cases to use archive_read_open2() with only a read callback. Modified: head/lib/libarchive/archive_read.c head/lib/libarchive/test/read_open_memory.c head/lib/libarchive/test/test.h head/lib/libarchive/test/test_read_pax_truncated.c Modified: head/lib/libarchive/archive_read.c ============================================================================== --- head/lib/libarchive/archive_read.c Sat Mar 7 01:18:30 2009 (r189471) +++ head/lib/libarchive/archive_read.c Sat Mar 7 01:21:46 2009 (r189472) @@ -234,6 +234,8 @@ static int64_t client_skip_proxy(struct archive_read_filter *self, int64_t request) { int64_t r; + if (self->archive->client.skipper == NULL) + return (0); r = (self->archive->client.skipper)(&self->archive->archive, self->data, request); self->archive->archive.raw_position += r; Modified: head/lib/libarchive/test/read_open_memory.c ============================================================================== --- head/lib/libarchive/test/read_open_memory.c Sat Mar 7 01:18:30 2009 (r189471) +++ head/lib/libarchive/test/read_open_memory.c Sat Mar 7 01:21:46 2009 (r189472) @@ -54,10 +54,30 @@ static ssize_t memory_read_skip(struct a static off_t memory_read_skip(struct archive *, void *, off_t request); #endif static ssize_t memory_read(struct archive *, void *, const void **buff); +static int read_open_memory_internal(struct archive *a, void *buff, + size_t size, size_t read_size, int fullapi); + int read_open_memory(struct archive *a, void *buff, size_t size, size_t read_size) { + return read_open_memory_internal(a, buff, size, read_size, 1); +} + +/* + * As above, but don't register any optional part of the API, to verify + * that internals work correctly with just the minimal entry points. + */ +int +read_open_memory2(struct archive *a, void *buff, size_t size, size_t read_size) +{ + return read_open_memory_internal(a, buff, size, read_size, 0); +} + +static int +read_open_memory_internal(struct archive *a, void *buff, + size_t size, size_t read_size, int fullapi) +{ struct read_memory_data *mine; mine = (struct read_memory_data *)malloc(sizeof(*mine)); @@ -71,8 +91,12 @@ read_open_memory(struct archive *a, void mine->read_size = read_size; mine->copy_buff_size = read_size + 64; mine->copy_buff = malloc(mine->copy_buff_size); - return (archive_read_open2(a, mine, memory_read_open, - memory_read, memory_read_skip, memory_read_close)); + if (fullapi) + return (archive_read_open2(a, mine, memory_read_open, + memory_read, memory_read_skip, memory_read_close)); + else + return (archive_read_open2(a, mine, NULL, + memory_read, NULL, NULL)); } /* Modified: head/lib/libarchive/test/test.h ============================================================================== --- head/lib/libarchive/test/test.h Sat Mar 7 01:18:30 2009 (r189471) +++ head/lib/libarchive/test/test.h Sat Mar 7 01:21:46 2009 (r189472) @@ -166,6 +166,8 @@ void extract_reference_file(const char * /* Special customized read-from-memory interface. */ int read_open_memory(struct archive *, void *, size_t, size_t); +/* "2" version exercises a slightly different set of libarchive APIs. */ +int read_open_memory2(struct archive *, void *, size_t, size_t); /* * ARCHIVE_VERSION_STAMP first appeared in 1.9 and libarchive 2.2.4. Modified: head/lib/libarchive/test/test_read_pax_truncated.c ============================================================================== --- head/lib/libarchive/test/test_read_pax_truncated.c Sat Mar 7 01:18:30 2009 (r189471) +++ head/lib/libarchive/test/test_read_pax_truncated.c Sat Mar 7 01:21:46 2009 (r189472) @@ -72,7 +72,7 @@ DEFINE_TEST(test_read_pax_truncated) assert((a = archive_read_new()) != NULL); assertA(0 == archive_read_support_format_all(a)); assertA(0 == archive_read_support_compression_all(a)); - assertA(0 == read_open_memory(a, buff, i, 13)); + assertA(0 == read_open_memory2(a, buff, i, 13)); if (i < 1536) { assertEqualIntA(a, ARCHIVE_FATAL, archive_read_next_header(a, &ae));