From 4e09d09686df70efc1c16c2bb41f716c6ce4fca4 Mon Sep 17 00:00:00 2001 From: Ladislav Zezula Date: Sun, 21 Apr 2024 21:42:04 +0200 Subject: Fixed page fault from https://github.com/ladislav-zezula/StormLib/issues/343 --- src/SFileGetFileInfo.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/SFileGetFileInfo.cpp') diff --git a/src/SFileGetFileInfo.cpp b/src/SFileGetFileInfo.cpp index 20f5e75..5dd997d 100644 --- a/src/SFileGetFileInfo.cpp +++ b/src/SFileGetFileInfo.cpp @@ -428,6 +428,8 @@ bool WINAPI SFileGetFileInfo( return GetInfo(pvFileInfo, cbFileInfo, &dwInt32Value, sizeof(DWORD), pcbLengthNeeded); case SFileInfoFileIndex: + if(hf->ha == NULL) + return GetInfo_ReturnError(ERROR_INVALID_PARAMETER); dwInt32Value = (DWORD)(pFileEntry - hf->ha->pFileTable); return GetInfo(pvFileInfo, cbFileInfo, &dwInt32Value, sizeof(DWORD), pcbLengthNeeded); -- cgit v1.2.3 From 0f8c306a3e9dfa536e97e9e0678773c40ea13a52 Mon Sep 17 00:00:00 2001 From: Ladislav Zezula Date: Sun, 21 Apr 2024 21:45:52 +0200 Subject: Fixed page fault from https://github.com/ladislav-zezula/StormLib/issues/344 --- src/SFileGetFileInfo.cpp | 2 ++ test/StormTest.cpp | 26 ++++++++++++++------------ 2 files changed, 16 insertions(+), 12 deletions(-) (limited to 'src/SFileGetFileInfo.cpp') diff --git a/src/SFileGetFileInfo.cpp b/src/SFileGetFileInfo.cpp index 5dd997d..1746fa0 100644 --- a/src/SFileGetFileInfo.cpp +++ b/src/SFileGetFileInfo.cpp @@ -452,6 +452,8 @@ bool WINAPI SFileGetFileInfo( return GetInfo(pvFileInfo, cbFileInfo, &hf->dwFileKey, sizeof(DWORD), pcbLengthNeeded); case SFileInfoEncryptionKeyRaw: + if(pFileEntry == NULL) + return GetInfo_ReturnError(ERROR_INVALID_PARAMETER); dwInt32Value = hf->dwFileKey; if(pFileEntry->dwFlags & MPQ_FILE_KEY_V2) dwInt32Value = (dwInt32Value ^ pFileEntry->dwFileSize) - (DWORD)hf->MpqFilePos; diff --git a/test/StormTest.cpp b/test/StormTest.cpp index 76d1f3b..88eed97 100755 --- a/test/StormTest.cpp +++ b/test/StormTest.cpp @@ -3801,27 +3801,29 @@ typedef double f64; static void Test_PlayingSpace() { void * v0 = NULL; // hMpq - void * v1 = NULL; // hMpqOrFile - u8 v2_tmp[] = {83, 0,}; // file_buf - u8 * v2 = (u8 *)HeapAlloc(GetProcessHeap(), 0, sizeof v2_tmp); + void * v1 = NULL; // hFile + u8 v2_tmp[] = {181, 0,}; // file_buf + u8 * v2 = (u8 *)malloc(sizeof v2_tmp); memcpy(v2, v2_tmp, sizeof v2_tmp); - - char * path_v3 = "e:\\hop-poc09"; + char * path_v3 = "e:\\hop-poc10"; FILE * f_v3 = fopen(path_v3, "wb"); fwrite(v2, sizeof v2_tmp, 1, f_v3); fclose(f_v3); - char * v3 = path_v3; // szFileName u32 v4 = 4294967295; // dwSearchScope void ** v5 = &v1; // phFile i8 v6 = SFileOpenFileEx(v0, v3, v4, v5); // $relative if(v6 == false) exit(1); - - enum _SFileInfoClass v8 = (enum _SFileInfoClass)48; // InfoClass - i8 * v9 = NULL; // pvFileInfo - u32 * v10 = NULL; // pcbLengthNeeded - u32 v11 = 0; // cbFileInfo - i8 v12 = SFileGetFileInfo(v1, v8, v9, v11, (LPDWORD)(v10)); // $target + i8 * v8 = NULL; // pvData + u32 v9 = 254; // dwSize + u32 v10 = 11; // dwCompression + enum _SFileInfoClass v11 = (enum _SFileInfoClass)(55); // InfoClass + i8 * v12 = NULL; // pvFileInfo + u32 v13 = 0; // cbFileInfo + u32 * v14 = NULL; // pcbLengthNeeded + i8 v15 = SFileGetFileInfo(v1, v11, v12, v13, (LPDWORD)(v14)); // $relative + if(v15 == false) exit(1); + i8 v16 = SFileWriteFile(v1, v8, v9, v10); // $target } //----------------------------------------------------------------------------- -- cgit v1.2.3