1. properly check parameters in SetFilePointer(Ex)()

2. fixed several functions to fail if dealing with console handles

svn path=/trunk/; revision=9513
This commit is contained in:
Thomas Bluemel 2004-05-28 13:17:32 +00:00
parent 938ede25cd
commit 336746ec95
2 changed files with 64 additions and 20 deletions

View file

@ -1,4 +1,4 @@
/* $Id: file.c,v 1.54 2004/05/25 20:04:13 navaraf Exp $ /* $Id: file.c,v 1.55 2004/05/28 13:17:32 weiden Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries * PROJECT: ReactOS system libraries
@ -221,7 +221,7 @@ SetFilePointer(HANDLE hFile,
DWORD dwMoveMethod) DWORD dwMoveMethod)
{ {
FILE_POSITION_INFORMATION FilePosition; FILE_POSITION_INFORMATION FilePosition;
FILE_STANDARD_INFORMATION FileStandart; FILE_STANDARD_INFORMATION FileStandard;
NTSTATUS errCode; NTSTATUS errCode;
IO_STATUS_BLOCK IoStatusBlock; IO_STATUS_BLOCK IoStatusBlock;
LARGE_INTEGER Distance; LARGE_INTEGER Distance;
@ -229,7 +229,11 @@ SetFilePointer(HANDLE hFile,
DPRINT("SetFilePointer(hFile %x, lDistanceToMove %d, dwMoveMethod %d)\n", DPRINT("SetFilePointer(hFile %x, lDistanceToMove %d, dwMoveMethod %d)\n",
hFile,lDistanceToMove,dwMoveMethod); hFile,lDistanceToMove,dwMoveMethod);
/* FIXME - should fail if hFile is a console handle */ if(IsConsoleHandle(hFile))
{
SetLastError(ERROR_INVALID_HANDLE);
return -1;
}
Distance.u.LowPart = lDistanceToMove; Distance.u.LowPart = lDistanceToMove;
if (lpDistanceToMoveHigh) if (lpDistanceToMoveHigh)
@ -258,15 +262,18 @@ SetFilePointer(HANDLE hFile,
case FILE_END: case FILE_END:
NtQueryInformationFile(hFile, NtQueryInformationFile(hFile,
&IoStatusBlock, &IoStatusBlock,
&FileStandart, &FileStandard,
sizeof(FILE_STANDARD_INFORMATION), sizeof(FILE_STANDARD_INFORMATION),
FileStandardInformation); FileStandardInformation);
FilePosition.CurrentByteOffset.QuadPart = FilePosition.CurrentByteOffset.QuadPart =
FileStandart.EndOfFile.QuadPart + Distance.QuadPart; FileStandard.EndOfFile.QuadPart + Distance.QuadPart;
break; break;
case FILE_BEGIN: case FILE_BEGIN:
FilePosition.CurrentByteOffset.QuadPart = Distance.QuadPart; FilePosition.CurrentByteOffset.QuadPart = Distance.QuadPart;
break; break;
default:
SetLastError(ERROR_INVALID_PARAMETER);
return -1;
} }
if(FilePosition.CurrentByteOffset.QuadPart < 0) if(FilePosition.CurrentByteOffset.QuadPart < 0)
@ -305,11 +312,15 @@ SetFilePointerEx(HANDLE hFile,
DWORD dwMoveMethod) DWORD dwMoveMethod)
{ {
FILE_POSITION_INFORMATION FilePosition; FILE_POSITION_INFORMATION FilePosition;
FILE_STANDARD_INFORMATION FileStandart; FILE_STANDARD_INFORMATION FileStandard;
NTSTATUS errCode; NTSTATUS errCode;
IO_STATUS_BLOCK IoStatusBlock; IO_STATUS_BLOCK IoStatusBlock;
/* FIXME - should fail if hFile is a console handle */ if(IsConsoleHandle(hFile))
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
switch(dwMoveMethod) switch(dwMoveMethod)
{ {
@ -324,15 +335,18 @@ SetFilePointerEx(HANDLE hFile,
case FILE_END: case FILE_END:
NtQueryInformationFile(hFile, NtQueryInformationFile(hFile,
&IoStatusBlock, &IoStatusBlock,
&FileStandart, &FileStandard,
sizeof(FILE_STANDARD_INFORMATION), sizeof(FILE_STANDARD_INFORMATION),
FileStandardInformation); FileStandardInformation);
FilePosition.CurrentByteOffset.QuadPart = FilePosition.CurrentByteOffset.QuadPart =
FileStandart.EndOfFile.QuadPart + liDistanceToMove.QuadPart; FileStandard.EndOfFile.QuadPart + liDistanceToMove.QuadPart;
break; break;
case FILE_BEGIN: case FILE_BEGIN:
FilePosition.CurrentByteOffset.QuadPart = liDistanceToMove.QuadPart; FilePosition.CurrentByteOffset.QuadPart = liDistanceToMove.QuadPart;
break; break;
default:
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
} }
if(FilePosition.CurrentByteOffset.QuadPart < 0) if(FilePosition.CurrentByteOffset.QuadPart < 0)
@ -594,6 +608,12 @@ GetFileInformationByHandle(HANDLE hFile,
NTSTATUS errCode; NTSTATUS errCode;
IO_STATUS_BLOCK IoStatusBlock; IO_STATUS_BLOCK IoStatusBlock;
if(IsConsoleHandle(hFile))
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
errCode = NtQueryInformationFile(hFile, errCode = NtQueryInformationFile(hFile,
&IoStatusBlock, &IoStatusBlock,
&FileBasic, &FileBasic,
@ -1043,6 +1063,12 @@ GetFileTime(HANDLE hFile,
FILE_BASIC_INFORMATION FileBasic; FILE_BASIC_INFORMATION FileBasic;
NTSTATUS Status; NTSTATUS Status;
if(IsConsoleHandle(hFile))
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
Status = NtQueryInformationFile(hFile, Status = NtQueryInformationFile(hFile,
&IoStatusBlock, &IoStatusBlock,
&FileBasic, &FileBasic,
@ -1078,6 +1104,12 @@ SetFileTime(HANDLE hFile,
IO_STATUS_BLOCK IoStatusBlock; IO_STATUS_BLOCK IoStatusBlock;
NTSTATUS Status; NTSTATUS Status;
if(IsConsoleHandle(hFile))
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
Status = NtQueryInformationFile(hFile, Status = NtQueryInformationFile(hFile,
&IoStatusBlock, &IoStatusBlock,
&FileBasic, &FileBasic,
@ -1127,6 +1159,12 @@ SetEndOfFile(HANDLE hFile)
FILE_POSITION_INFORMATION FilePosInfo; FILE_POSITION_INFORMATION FilePosInfo;
NTSTATUS Status; NTSTATUS Status;
if(IsConsoleHandle(hFile))
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
//get current position //get current position
Status = NtQueryInformationFile( Status = NtQueryInformationFile(
hFile, hFile,
@ -1233,6 +1271,12 @@ SetFileShortNameW(
IO_STATUS_BLOCK IoStatusBlock; IO_STATUS_BLOCK IoStatusBlock;
PFILE_NAME_INFORMATION FileNameInformation; PFILE_NAME_INFORMATION FileNameInformation;
if(IsConsoleHandle(hFile))
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if(!lpShortName) if(!lpShortName)
{ {
SetLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
@ -1283,6 +1327,12 @@ SetFileShortNameA(
ANSI_STRING ShortNameA; ANSI_STRING ShortNameA;
UNICODE_STRING ShortName; UNICODE_STRING ShortName;
if(IsConsoleHandle(hFile))
{
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if(!lpShortName) if(!lpShortName)
{ {
SetLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);

View file

@ -1,4 +1,4 @@
/* $Id: console.c,v 1.74 2004/03/14 17:53:26 weiden Exp $ /* $Id: console.c,v 1.75 2004/05/28 13:17:32 weiden Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries * PROJECT: ReactOS system libraries
@ -1030,17 +1030,10 @@ SetStdHandle(DWORD nStdHandle,
{ {
PRTL_USER_PROCESS_PARAMETERS Ppb; PRTL_USER_PROCESS_PARAMETERS Ppb;
/* no need to check if hHandle == INVALID_HANDLE_VALUE */
Ppb = NtCurrentPeb()->ProcessParameters; Ppb = NtCurrentPeb()->ProcessParameters;
/* More checking needed? */
if (hHandle == INVALID_HANDLE_VALUE)
{
SetLastError (ERROR_INVALID_HANDLE);
return FALSE;
}
SetLastError(ERROR_SUCCESS); /* OK */
switch (nStdHandle) switch (nStdHandle)
{ {
case STD_INPUT_HANDLE: case STD_INPUT_HANDLE:
@ -1056,7 +1049,8 @@ SetStdHandle(DWORD nStdHandle,
return TRUE; return TRUE;
} }
SetLastError (ERROR_INVALID_PARAMETER); /* windows for whatever reason sets the last error to ERROR_INVALID_HANDLE here */
SetLastError (ERROR_INVALID_HANDLE);
return FALSE; return FALSE;
} }