From f7c45410e5cfa8d65523c087115885fe74ea8704 Mon Sep 17 00:00:00 2001 From: Ben Pye Date: Thu, 12 Feb 2015 21:12:39 +0000 Subject: [PATCH] Error if the filesize pointer is null, improve GetFileSizeEx test. --- src/pal/src/file/file.cpp | 18 ++- .../file_io/GetFileSizeEx/test1/GetFileSizeEx.c | 164 ++++++++------------- 2 files changed, 76 insertions(+), 106 deletions(-) diff --git a/src/pal/src/file/file.cpp b/src/pal/src/file/file.cpp index e89ba2a..93aa141 100644 --- a/src/pal/src/file/file.cpp +++ b/src/pal/src/file/file.cpp @@ -3060,18 +3060,22 @@ OUT PLARGE_INTEGER lpFileSize) pThread = InternalGetCurrentThread(); - palError = InternalGetFileSize( - pThread, - hFile, - &dwFileSizeLow, - &dwFileSizeHigh - ); - if (lpFileSize != NULL) { + palError = InternalGetFileSize( + pThread, + hFile, + &dwFileSizeLow, + &dwFileSizeHigh + ); + lpFileSize->u.LowPart = dwFileSizeLow; lpFileSize->u.HighPart = dwFileSizeHigh; } + else + { + palError = ERROR_INVALID_PARAMETER; + } if (NO_ERROR != palError) { diff --git a/src/pal/tests/palsuite/file_io/GetFileSizeEx/test1/GetFileSizeEx.c b/src/pal/tests/palsuite/file_io/GetFileSizeEx/test1/GetFileSizeEx.c index 6c64ce9..47669a6 100644 --- a/src/pal/tests/palsuite/file_io/GetFileSizeEx/test1/GetFileSizeEx.c +++ b/src/pal/tests/palsuite/file_io/GetFileSizeEx/test1/GetFileSizeEx.c @@ -30,86 +30,12 @@ void CleanUp(HANDLE hFile) } } - -int __cdecl main(int argc, char *argv[]) +void CheckFileSize(HANDLE hFile, DWORD dwOffset, DWORD dwHighOrder) { - HANDLE hFile = NULL; - BOOL bRc = FALSE; DWORD dwRc = 0; DWORD dwError = 0; - DWORD dwHighOrder = 0; - DWORD dwOffset = 0; - DWORD dwReturnedHighOrder = 0; - DWORD dwReturnedOffset = 0; - DWORD lpNumberOfBytesWritten; LARGE_INTEGER qwFileSize; - LARGE_INTEGER qwFileSize2; - char * data = "1234567890"; - - qwFileSize.QuadPart = 0; - qwFileSize2.QuadPart = 0; - - if (0 != PAL_Initialize(argc,argv)) - { - return FAIL; - } - - /* test on a null file handle */ - bRc = GetFileSizeEx(hFile, NULL); - if (bRc != FALSE) - { - Fail("GetFileSizeEx: ERROR -> A file size was returned for " - "an invalid handle.\n"); - } - - - /* create a test file */ - hFile = CreateFile(szTextFile, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - NULL, - CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, - NULL); - - if(hFile == INVALID_HANDLE_VALUE) - { - Fail("GetFileSizeEx: ERROR -> Unable to create file \"%s\".\n", - szTextFile); - } - - /* give the file a size */ - dwOffset = 256; - dwRc = SetFilePointer(hFile, dwOffset, NULL, FILE_BEGIN); - if (dwRc == INVALID_SET_FILE_POINTER) - { - Trace("GetFileSizeEx: ERROR -> Call to SetFilePointer failed with %ld.\n", - GetLastError()); - CleanUp(hFile); - Fail(""); - } - else - { - if (!SetEndOfFile(hFile)) - { - Trace("GetFileSizeEx: ERROR -> Call to SetEndOfFile failed with %ld.\n", - GetLastError()); - CleanUp(hFile); - Fail(""); - } - GetFileSizeEx(hFile, &qwFileSize); - if ((qwFileSize.u.LowPart != dwOffset) || - (qwFileSize.u.HighPart != dwHighOrder)) - { - CleanUp(hFile); - Fail("GetFileSizeEx: ERROR -> File sizes do not match up.\n"); - } - } - - /* make the file large using the high order option */ - dwOffset = 256; - dwHighOrder = 1; dwRc = SetFilePointer(hFile, dwOffset, (PLONG)&dwHighOrder, FILE_BEGIN); if (dwRc == INVALID_SET_FILE_POINTER) { @@ -146,37 +72,77 @@ int __cdecl main(int argc, char *argv[]) } } } +} + +int __cdecl main(int argc, char *argv[]) +{ + HANDLE hFile = NULL; + BOOL bRc = FALSE; + DWORD lpNumberOfBytesWritten; + LARGE_INTEGER qwFileSize; + LARGE_INTEGER qwFileSize2; + char * data = "1234567890"; + + qwFileSize.QuadPart = 0; + qwFileSize2.QuadPart = 0; + + if (0 != PAL_Initialize(argc,argv)) + { + return FAIL; + } - /* set the file size to zero */ - dwOffset = 0; - dwHighOrder = 0; - dwRc = SetFilePointer(hFile, dwOffset, NULL, FILE_BEGIN); - if (dwRc == INVALID_SET_FILE_POINTER) + /* test on a null file */ + bRc = GetFileSizeEx(NULL, &qwFileSize); + if (bRc != FALSE) { - Trace("GetFileSizeEx: ERROR -> SetEndOfFile call failed with error %ld\n", - GetLastError()); - CleanUp(hFile); - Fail(""); + Fail("GetFileSizeEx: ERROR -> Returned status as TRUE for " + "a null handle.\n"); } - else + + + /* test on an invalid file */ + bRc = GetFileSizeEx(INVALID_HANDLE_VALUE, &qwFileSize); + if (bRc != FALSE) { - if (!SetEndOfFile(hFile)) - { - Trace("GetFileSizeEx: ERROR -> Call to SetEndOfFile failed " - "with %ld.\n", GetLastError()); - CleanUp(hFile); - Fail(""); - } - GetFileSizeEx(hFile, &qwFileSize); - if ((qwFileSize.u.LowPart != dwOffset) || - (qwFileSize.u.HighPart != dwHighOrder)) - { - CleanUp(hFile); - Fail("GetFileSizeEx: ERROR -> File sizes do not match up.\n"); - } + Fail("GetFileSizeEx: ERROR -> Returned status as TRUE for " + "an invalid handle.\n"); + } + + + /* create a test file */ + hFile = CreateFile(szTextFile, + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL, + NULL); + + if(hFile == INVALID_HANDLE_VALUE) + { + Fail("GetFileSizeEx: ERROR -> Unable to create file \"%s\".\n", + szTextFile); + } + + /* test on a null lpFileSize */ + bRc = GetFileSizeEx(hFile, NULL); + if (bRc != FALSE) + { + Fail("GetFileSizeEx: ERROR -> Returned status as TRUE for " + "a null lpFileSize.\n"); } + /* give the file a size */ + CheckFileSize(hFile, 256, 0); + + /* make the file large using the high order option */ + CheckFileSize(hFile, 256, 1); + + + /* set the file size to zero */ + CheckFileSize(hFile, 0, 0); + /* test if file size changes by writing to it. */ /* get file size */ GetFileSizeEx(hFile, &qwFileSize); -- 2.7.4