From 31f7eb6d370d1ca5ec70a6143bf3d6bc2863f254 Mon Sep 17 00:00:00 2001
From: Stuart Caie <kyzer@cabextract.org.uk>
Date: Wed, 17 Oct 2018 11:29:03 +0100
Subject: [PATCH 4/6] Avoid returning CHM file entries that are "blank" because
they have embedded null bytes
(cherry picked from commit 8759da8db6ec9e866cb8eb143313f397f925bb4f)
---
libmspack/trunk/mspack/chmd.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/libmspack/trunk/mspack/chmd.c b/libmspack/trunk/mspack/chmd.c
index cea9fc2..beaccb7 100644
--- a/libmspack/trunk/mspack/chmd.c
+++ b/libmspack/trunk/mspack/chmd.c
@@ -447,14 +447,14 @@ static int chmd_read_headers(struct mspack_system *sys, struct mspack_file *fh,
while (num_entries--) {
READ_ENCINT(name_len);
if (name_len > (unsigned int) (end - p)) goto chunk_end;
- /* consider blank filenames to be an error */
- if (name_len == 0) goto chunk_end;
name = p; p += name_len;
-
READ_ENCINT(section);
READ_ENCINT(offset);
READ_ENCINT(length);
+ /* ignore blank or one-char (e.g. "/") filenames we'd return as blank */
+ if (name_len < 2 || !name[0] || !name[1]) continue;
+
/* empty files and directory names are stored as a file entry at
* offset 0 with length 0. We want to keep empty files, but not
* directory names, which end with a "/" */
--
2.22.0