From 55ae3b1c3e308a257618bb6122bc1f574530aa21 Mon Sep 17 00:00:00 2001 From: rofl0r Date: Mon, 26 Feb 2024 17:17:33 +0000 Subject: [PATCH] FS: fix crash overreading data on flash0 noticed while using intrafont with some homebrew code. when using musl libc's hardened malloc, the overread in the code caused PPSSPP to segfault. --- Core/FileSystems/DirectoryFileSystem.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Core/FileSystems/DirectoryFileSystem.cpp b/Core/FileSystems/DirectoryFileSystem.cpp index da5a849bd9..3b90f5d9bb 100644 --- a/Core/FileSystems/DirectoryFileSystem.cpp +++ b/Core/FileSystems/DirectoryFileSystem.cpp @@ -1067,6 +1067,9 @@ size_t VFSFileSystem::ReadFile(u32 handle, u8 *pointer, s64 size, int &usec) { EntryMap::iterator iter = entries.find(handle); if (iter != entries.end()) { + if(iter->second.seekPos + size > iter->second.size) + size = iter->second.size - iter->second.seekPos; + if(size < 0) size = 0; size_t bytesRead = size; memcpy(pointer, iter->second.fileData + iter->second.seekPos, size); iter->second.seekPos += size;