summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko2008-07-26 16:50:24 +0000
committerDenis Vlasenko2008-07-26 16:50:24 +0000
commitc2dcb7cf63993a80208db653d1f9d39eab5a4567 (patch)
tree9e47d805c0f04b251ab500549b672a6afeb880c8
parent8dbea7dbb1b18135a02a0a2c8f7ab9fdb27a59a7 (diff)
downloadbusybox-c2dcb7cf63993a80208db653d1f9d39eab5a4567.zip
busybox-c2dcb7cf63993a80208db653d1f9d39eab5a4567.tar.gz
unzip: give better error message when presented with unsupported
zip file. Add zip documentation and an example of file we cant (yet) unpack.
-rw-r--r--archival/unzip.c6
-rw-r--r--archival/unzip_cant_handle.odtbin0 -> 6948 bytes
-rw-r--r--archival/unzip_doc.txt.bz2bin0 -> 11359 bytes
3 files changed, 6 insertions, 0 deletions
diff --git a/archival/unzip.c b/archival/unzip.c
index 7c92f5d..36490cb 100644
--- a/archival/unzip.c
+++ b/archival/unzip.c
@@ -99,6 +99,12 @@ static void unzip_create_leading_dirs(const char *fn)
static void unzip_extract(zip_header_t *zip_header, int src_fd, int dst_fd)
{
+ if (zip_header->formatted.flags & (0x0008|0x0001)) {
+ /* 0x0001 - encrypted */
+ /* 0x0008 - streaming. [u]cmpsize can be reliably gotten
+ * only from Central Directory. See unzip_doc.txt */
+ bb_error_msg_and_die("zip flags 8 and 1 are not supported");
+ }
if (zip_header->formatted.method == 0) {
/* Method 0 - stored (not compressed) */
off_t size = zip_header->formatted.ucmpsize;
diff --git a/archival/unzip_cant_handle.odt b/archival/unzip_cant_handle.odt
new file mode 100644
index 0000000..715e4a9
--- /dev/null
+++ b/archival/unzip_cant_handle.odt
Binary files differ
diff --git a/archival/unzip_doc.txt.bz2 b/archival/unzip_doc.txt.bz2
new file mode 100644
index 0000000..ab77d10
--- /dev/null
+++ b/archival/unzip_doc.txt.bz2
Binary files differ