summaryrefslogtreecommitdiff
path: root/libarchive/archive_read_support_format_cpio.c
diff options
context:
space:
mode:
authorTim Kientzle <kientzle@acm.org>2016-05-14 12:37:37 -0700
committerTim Kientzle <kientzle@acm.org>2016-05-14 12:37:37 -0700
commitfd7e0c02e272913a0a8b6d492c7260dfca0b1408 (patch)
tree9b3ffce56a0a62a3dc3ce727a04414d7eb7a321d /libarchive/archive_read_support_format_cpio.c
parentf48d99b56c525c3035de63a36e3321701b58b3c1 (diff)
downloadlibarchive-fd7e0c02e272913a0a8b6d492c7260dfca0b1408.tar.gz
Reject cpio symlinks that exceed 1MB
Diffstat (limited to 'libarchive/archive_read_support_format_cpio.c')
-rw-r--r--libarchive/archive_read_support_format_cpio.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/libarchive/archive_read_support_format_cpio.c b/libarchive/archive_read_support_format_cpio.c
index c2ca85bd..b09db0e9 100644
--- a/libarchive/archive_read_support_format_cpio.c
+++ b/libarchive/archive_read_support_format_cpio.c
@@ -401,6 +401,11 @@ archive_read_format_cpio_read_header(struct archive_read *a,
/* If this is a symlink, read the link contents. */
if (archive_entry_filetype(entry) == AE_IFLNK) {
+ if (cpio->entry_bytes_remaining > 1024 * 1024) {
+ archive_set_error(&a->archive, ENOMEM,
+ "Rejecting malformed cpio archive: symlink contents exceed 1 megabyte");
+ return (ARCHIVE_FATAL);
+ }
h = __archive_read_ahead(a,
(size_t)cpio->entry_bytes_remaining, NULL);
if (h == NULL)