diff options
author | cperciva <cperciva@FreeBSD.org> | 2007-02-05 16:30:40 +0000 |
---|---|---|
committer | cperciva <cperciva@FreeBSD.org> | 2007-02-05 16:30:40 +0000 |
commit | 41a7b3c7b0b73a68f39b8053db70eae7a6a23cb1 (patch) | |
tree | d7a37d18f40d9c8c9743d97f9c05252b930537e9 /lib | |
parent | 94de0f0fd023089743dfde41f9c02d55e6136af2 (diff) | |
download | FreeBSD-src-41a7b3c7b0b73a68f39b8053db70eae7a6a23cb1.zip FreeBSD-src-41a7b3c7b0b73a68f39b8053db70eae7a6a23cb1.tar.gz |
If (a == NULL), don't dereference (a) to record an error message. [1]
Fallout from changing the skip API to use off_t instead of size_t: Print
the skip length using %jd and cast to (intmax_t) instead of %d / (int),
and if ARCHIVE_API_VERSION >= 2, allow the client skipper to be called
for requests longer than SSIZE_MAX. [2]
Approved by: kientzle
Pointy hats to: kientzle [1], cperciva [2]
MFC after: 3 days
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libarchive/archive_read.c | 4 | ||||
-rw-r--r-- | lib/libarchive/archive_read_support_compression_none.c | 7 |
2 files changed, 7 insertions, 4 deletions
diff --git a/lib/libarchive/archive_read.c b/lib/libarchive/archive_read.c index c24f139..8574483 100644 --- a/lib/libarchive/archive_read.c +++ b/lib/libarchive/archive_read.c @@ -65,10 +65,8 @@ archive_read_new(void) unsigned char *nulls; a = (struct archive *)malloc(sizeof(*a)); - if (a == NULL) { - archive_set_error(a, ENOMEM, "Can't allocate archive object"); + if (a == NULL) return (NULL); - } memset(a, 0, sizeof(*a)); a->user_uid = geteuid(); diff --git a/lib/libarchive/archive_read_support_compression_none.c b/lib/libarchive/archive_read_support_compression_none.c index fe76310..1109488 100644 --- a/lib/libarchive/archive_read_support_compression_none.c +++ b/lib/libarchive/archive_read_support_compression_none.c @@ -301,7 +301,11 @@ archive_decompressor_none_skip(struct archive *a, off_t request) /* * If a client_skipper was provided, try that first. */ +#if ARCHIVE_API_VERSION < 2 if ((a->client_skipper != NULL) && (request < SSIZE_MAX)) { +#else + if (a->client_skipper != NULL) { +#endif bytes_skipped = (a->client_skipper)(a, a->client_data, request); if (bytes_skipped < 0) { /* error */ @@ -333,7 +337,8 @@ archive_decompressor_none_skip(struct archive *a, off_t request) if (bytes_read == 0) { /* We hit EOF before we satisfied the skip request. */ archive_set_error(a, ARCHIVE_ERRNO_MISC, - "Truncated input file (need to skip %d bytes)", (int)request); + "Truncated input file (need to skip %jd bytes)", + (intmax_t)request); return (ARCHIVE_FATAL); } assert(bytes_read >= 0); /* precondition for cast below */ |