diff options
author | Martin Matuska <martin@matuska.org> | 2016-12-03 02:16:18 +0100 |
---|---|---|
committer | Martin Matuska <martin@matuska.org> | 2016-12-04 11:20:18 +0100 |
commit | 7c2ffc204a37e52375678b902999be4215d790a9 (patch) | |
tree | e1cee78c0cc26d6f5154ff7d1989812b8a8c0f1f /libarchive/archive_read_support_filter_uu.c | |
parent | 17feb73ffcb0a955c42e1964c47da046976e7734 (diff) | |
download | libarchive-7c2ffc204a37e52375678b902999be4215d790a9.tar.gz |
Fix hang in uudecode_filter_read()
Reported-by: OSS-Fuzz issue 16
Diffstat (limited to 'libarchive/archive_read_support_filter_uu.c')
-rw-r--r-- | libarchive/archive_read_support_filter_uu.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/libarchive/archive_read_support_filter_uu.c b/libarchive/archive_read_support_filter_uu.c index 1d682af2..1084c415 100644 --- a/libarchive/archive_read_support_filter_uu.c +++ b/libarchive/archive_read_support_filter_uu.c @@ -511,6 +511,13 @@ read_more: } llen = len; if ((nl == 0) && (uudecode->state != ST_UUEND)) { + if (total == 0 && ravail <= 0) { + /* There is nothing more to read, fail */ + archive_set_error(&self->archive->archive, + ARCHIVE_ERRNO_FILE_FORMAT, + "Missing format data"); + return (ARCHIVE_FATAL); + } /* * Save remaining data which does not contain * NL('\n','\r'). |