From 6c331fc7e1e5b9b9273ea4257721397f335093bf Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Mon, 5 Aug 2019 08:34:14 -0500 Subject: [PATCH] kit/package: Error on short file read * It's safe to assume that if the file is shorter than the provided header, things will go poorly. * Avoids a random vauge ReadBuffer error. * This doesn't fix #15230, but makes the issue clearer. Change-Id: I3471e6de384a0c9be94049ad891c01be980f7846 Reviewed-on: https://review.haiku-os.org/c/1679 Reviewed-by: Adrien Destugues --- headers/private/package/hpkg/ReaderImplBase.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/headers/private/package/hpkg/ReaderImplBase.h b/headers/private/package/hpkg/ReaderImplBase.h index 1341a6e495..57f386a2cb 100644 --- a/headers/private/package/hpkg/ReaderImplBase.h +++ b/headers/private/package/hpkg/ReaderImplBase.h @@ -451,6 +451,13 @@ ReaderImplBase::Init(BPositionIO* file, bool keepFile, Header& header, uint32 fl fileSize = -1; } + // validate file is longer than header (when not a stream) + if (fileSize >= 0 && fileSize < (off_t)sizeof(header)) { + ErrorOutput()->PrintError("Error: Invalid %s file: Length shorter than " + "header!\n", fFileType); + return B_BAD_DATA; + } + // read the header if ((error = ReadBuffer(0, &header, sizeof(header))) != B_OK) return error;