|
|
a995b3 |
From 1ba660b3300d67b8ce9f6b96bbae0b36fa2d6b06 Mon Sep 17 00:00:00 2001
|
|
|
a995b3 |
From: Guido Draheim <guidod@gmx.de>
|
|
|
a995b3 |
Date: Tue, 13 Mar 2018 01:29:44 +0100
|
|
|
a995b3 |
Subject: [PATCH] check zlib space to be within buffer #39
|
|
|
a995b3 |
|
|
|
a995b3 |
---
|
|
|
a995b3 |
zzip/memdisk.c | 9 +++++++++
|
|
|
a995b3 |
zzip/mmapped.c | 2 ++
|
|
|
a995b3 |
2 files changed, 11 insertions(+)
|
|
|
a995b3 |
|
|
|
a995b3 |
diff --git a/zzip/memdisk.c b/zzip/memdisk.c
|
|
|
a995b3 |
index 3de201c..8d5743d 100644
|
|
|
a995b3 |
--- a/zzip/memdisk.c
|
|
|
a995b3 |
+++ b/zzip/memdisk.c
|
|
|
a995b3 |
@@ -521,11 +521,20 @@ zzip_mem_entry_fopen(ZZIP_MEM_DISK * dir, ZZIP_MEM_ENTRY * entry)
|
|
|
a995b3 |
file->zlib.avail_in = zzip_mem_entry_csize(entry);
|
|
|
a995b3 |
file->zlib.next_in = zzip_mem_entry_to_data(entry);
|
|
|
a995b3 |
|
|
|
a995b3 |
+ debug2("compressed size %i", (int) file->zlib.avail_in);
|
|
|
a995b3 |
+ if (file->zlib.next_in + file->zlib.avail_in >= file->endbuf)
|
|
|
a995b3 |
+ goto error;
|
|
|
a995b3 |
+ if (file->zlib.next_in < file->buffer)
|
|
|
a995b3 |
+ goto error;
|
|
|
a995b3 |
+
|
|
|
a995b3 |
if (! zzip_mem_entry_data_deflated(entry) ||
|
|
|
a995b3 |
inflateInit2(&file->zlib, -MAX_WBITS) != Z_OK)
|
|
|
a995b3 |
{ free (file); return 0; }
|
|
|
a995b3 |
|
|
|
a995b3 |
return file;
|
|
|
a995b3 |
+error:
|
|
|
a995b3 |
+ errno = EBADMSG;
|
|
|
a995b3 |
+ return NULL;
|
|
|
a995b3 |
}
|
|
|
a995b3 |
|
|
|
a995b3 |
zzip__new__ ZZIP_MEM_DISK_FILE *
|
|
|
a995b3 |
diff --git a/zzip/mmapped.c b/zzip/mmapped.c
|
|
|
a995b3 |
index 920c4df..8af18f4 100644
|
|
|
a995b3 |
--- a/zzip/mmapped.c
|
|
|
a995b3 |
+++ b/zzip/mmapped.c
|
|
|
a995b3 |
@@ -654,6 +654,8 @@ zzip_disk_entry_fopen(ZZIP_DISK * disk, ZZIP_DISK_ENTRY * entry)
|
|
|
a995b3 |
DBG2("compressed size %i", (int) file->zlib.avail_in);
|
|
|
a995b3 |
if (file->zlib.next_in + file->zlib.avail_in >= disk->endbuf)
|
|
|
a995b3 |
goto error;
|
|
|
a995b3 |
+ if (file->zlib.next_in < disk->buffer)
|
|
|
a995b3 |
+ goto error;
|
|
|
a995b3 |
|
|
|
a995b3 |
if (! zzip_file_header_data_deflated(header))
|
|
|
a995b3 |
goto error;
|