From 8fc7aeca38d658bc1c2f5ec1e2ee8cc66fd2cf30 Mon Sep 17 00:00:00 2001 From: JalonSolov Date: Tue, 29 Apr 2025 02:07:09 -0400 Subject: [PATCH] szip: fix panic on empty files (#24335) --- vlib/compress/szip/szip.c.v | 2 +- vlib/compress/szip/szip_test.v | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/vlib/compress/szip/szip.c.v b/vlib/compress/szip/szip.c.v index 44bba6bd57..76b5080c0e 100644 --- a/vlib/compress/szip/szip.c.v +++ b/vlib/compress/szip/szip.c.v @@ -183,7 +183,7 @@ pub fn (mut zentry Zip) crc32() u32 { // write_entry compresses an input buffer for the current zip entry. pub fn (mut zentry Zip) write_entry(data []u8) ! { - if int(data[0] & 0xff) == -1 { + if data.len > 0 && int(data[0] & 0xff) == -1 { return error('szip: cannot write entry') } res := C.zip_entry_write(zentry, data.data, data.len) diff --git a/vlib/compress/szip/szip_test.v b/vlib/compress/szip/szip_test.v index 730928ffd7..6f5254f2cb 100644 --- a/vlib/compress/szip/szip_test.v +++ b/vlib/compress/szip/szip_test.v @@ -170,3 +170,11 @@ fn test_zip_folder_omit_empty_directories() { assert (os.read_file(fpath5)!) == '5' assert (os.read_file(fpath6)!) == '6' } + +fn test_zip_folder_empty_file() { + cleanup() + os.mkdir_all(test_path)! + os.write_file('${test_path}/test.txt', '')! // Empty file + szip.zip_folder(test_path, test_dir_zip)! + assert os.exists(test_dir_zip) +}