From 4aaab80649d0e48dd47787ee48edd9cc2287b7e8 Mon Sep 17 00:00:00 2001 From: Rummskartoffel Date: Sat, 15 Jan 2022 20:14:14 +0100 Subject: [PATCH] unzip: Don't fail from mmap when trying to decompress empty files Given an empty file, unzip would try to create a zero-size memory mapping of that file, which would fail with EINVAL. With this commit, attempting to unzip an empty file of course still fails, since that's not a valid PKZIP file, but it now fails for the correct reason and with the correct error message. --- Userland/Utilities/unzip.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Userland/Utilities/unzip.cpp b/Userland/Utilities/unzip.cpp index 9488ec49dd..c45a4530eb 100644 --- a/Userland/Utilities/unzip.cpp +++ b/Userland/Utilities/unzip.cpp @@ -100,12 +100,17 @@ ErrorOr serenity_main(Main::Arguments arguments) return 1; } - auto mapped_file = TRY(Core::MappedFile::map(zip_file_path)); + RefPtr mapped_file; + ReadonlyBytes input_bytes; + if (st.st_size > 0) { + mapped_file = TRY(Core::MappedFile::map(zip_file_path)); + input_bytes = mapped_file->bytes(); + } if (!quiet) warnln("Archive: {}", zip_file_path); - auto zip_file = Archive::Zip::try_create(mapped_file->bytes()); + auto zip_file = Archive::Zip::try_create(input_bytes); if (!zip_file.has_value()) { warnln("Invalid zip file {}", zip_file_path); return 1;