From: Michihiro NAKAJIMA Date: Sun, 8 Nov 2009 18:36:26 +0000 (-0500) Subject: Return ARCHIVE_WARN properly if large inode number was truncated. X-Git-Tag: v2.8.0~221 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cfbe805862ef7c4a8fe39956a51a4ca08799cbc3;p=thirdparty%2Flibarchive.git Return ARCHIVE_WARN properly if large inode number was truncated. Found by Clang Static Analyzer. SVN-Revision: 1594 --- diff --git a/libarchive/archive_write_set_format_cpio.c b/libarchive/archive_write_set_format_cpio.c index d6090a6b7..c293ef2db 100644 --- a/libarchive/archive_write_set_format_cpio.c +++ b/libarchive/archive_write_set_format_cpio.c @@ -108,12 +108,12 @@ archive_write_cpio_header(struct archive_write *a, struct archive_entry *entry) { struct cpio *cpio; const char *p, *path; - int pathlength, ret; + int pathlength, ret, ret2; int64_t ino; struct cpio_header h; cpio = (struct cpio *)a->format_data; - ret = 0; + ret2 = ARCHIVE_OK; path = archive_entry_pathname(entry); pathlength = strlen(path) + 1; /* Include trailing null. */ @@ -130,7 +130,7 @@ archive_write_cpio_header(struct archive_write *a, struct archive_entry *entry) if (ino < 0 || ino > 0777777) { archive_set_error(&a->archive, ERANGE, "large inode number truncated"); - ret = ARCHIVE_WARN; + ret2 = ARCHIVE_WARN; } format_octal(archive_entry_ino64(entry) & 0777777, &h.c_ino, sizeof(h.c_ino)); @@ -172,6 +172,8 @@ archive_write_cpio_header(struct archive_write *a, struct archive_entry *entry) if (p != NULL && *p != '\0') ret = (a->compressor.write)(a, p, strlen(p)); + if (ret == ARCHIVE_OK) + ret = ret2; return (ret); }