From b86a2e455cc4d3f586367ab05af1f1be00c6df65 Mon Sep 17 00:00:00 2001 From: Stuart Caie Date: Wed, 17 Oct 2018 11:29:03 +0100 Subject: [PATCH 1/3] Avoid returning CHM file entries that are "blank" because they have embedded null bytes (cherry picked from commit 8759da8db6ec9e866cb8eb143313f397f925bb4f) --- libmspack/mspack/chmd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libmspack/mspack/chmd.c b/libmspack/mspack/chmd.c index b3f7fee..1d198bf 100644 --- a/libmspack/mspack/chmd.c +++ b/libmspack/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