mirror of
https://github.com/reactos/reactos.git
synced 2025-06-06 18:00:41 +00:00
[NTVDM]
Avoid array indexing with invalid indexes, always. svn path=/trunk/; revision=67347
This commit is contained in:
parent
f1c1d10824
commit
ffb82658c9
2 changed files with 19 additions and 9 deletions
|
@ -35,12 +35,18 @@ static PVOID EmsMemory = NULL;
|
||||||
|
|
||||||
/* PRIVATE FUNCTIONS **********************************************************/
|
/* PRIVATE FUNCTIONS **********************************************************/
|
||||||
|
|
||||||
|
static PEMS_HANDLE GetHandleRecord(USHORT Handle)
|
||||||
|
{
|
||||||
|
if (Handle >= EMS_MAX_HANDLES) return NULL;
|
||||||
|
return &HandleTable[Handle];
|
||||||
|
}
|
||||||
|
|
||||||
static USHORT EmsFree(USHORT Handle)
|
static USHORT EmsFree(USHORT Handle)
|
||||||
{
|
{
|
||||||
PLIST_ENTRY Entry;
|
PLIST_ENTRY Entry;
|
||||||
PEMS_HANDLE HandleEntry = &HandleTable[Handle];
|
PEMS_HANDLE HandleEntry = GetHandleRecord(Handle);
|
||||||
|
|
||||||
if (Handle >= EMS_MAX_HANDLES || !HandleEntry->Allocated)
|
if (HandleEntry == NULL || !HandleEntry->Allocated)
|
||||||
{
|
{
|
||||||
return EMS_STATUS_INVALID_HANDLE;
|
return EMS_STATUS_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
@ -131,7 +137,7 @@ static PEMS_PAGE GetLogicalPage(PEMS_HANDLE Handle, USHORT LogicalPage)
|
||||||
static USHORT EmsMap(USHORT Handle, UCHAR PhysicalPage, USHORT LogicalPage)
|
static USHORT EmsMap(USHORT Handle, UCHAR PhysicalPage, USHORT LogicalPage)
|
||||||
{
|
{
|
||||||
PEMS_PAGE PageEntry;
|
PEMS_PAGE PageEntry;
|
||||||
PEMS_HANDLE HandleEntry = &HandleTable[Handle];
|
PEMS_HANDLE HandleEntry = GetHandleRecord(Handle);
|
||||||
|
|
||||||
if (PhysicalPage >= EMS_PHYSICAL_PAGES) return EMS_STATUS_INV_PHYSICAL_PAGE;
|
if (PhysicalPage >= EMS_PHYSICAL_PAGES) return EMS_STATUS_INV_PHYSICAL_PAGE;
|
||||||
if (LogicalPage == 0xFFFF)
|
if (LogicalPage == 0xFFFF)
|
||||||
|
@ -141,7 +147,10 @@ static USHORT EmsMap(USHORT Handle, UCHAR PhysicalPage, USHORT LogicalPage)
|
||||||
return EMS_STATUS_OK;
|
return EMS_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Handle >= EMS_MAX_HANDLES || !HandleEntry->Allocated) return EMS_STATUS_INVALID_HANDLE;
|
if (HandleEntry == NULL || !HandleEntry->Allocated)
|
||||||
|
{
|
||||||
|
return EMS_STATUS_INVALID_HANDLE;
|
||||||
|
}
|
||||||
|
|
||||||
PageEntry = GetLogicalPage(HandleEntry, LogicalPage);
|
PageEntry = GetLogicalPage(HandleEntry, LogicalPage);
|
||||||
if (!PageEntry) return EMS_STATUS_INV_LOGICAL_PAGE;
|
if (!PageEntry) return EMS_STATUS_INV_LOGICAL_PAGE;
|
||||||
|
@ -224,9 +233,9 @@ static VOID WINAPI EmsIntHandler(LPWORD Stack)
|
||||||
if (Data->SourceType)
|
if (Data->SourceType)
|
||||||
{
|
{
|
||||||
/* Expanded memory */
|
/* Expanded memory */
|
||||||
HandleEntry = &HandleTable[Data->SourceHandle];
|
HandleEntry = GetHandleRecord(Data->SourceHandle);
|
||||||
|
|
||||||
if (Data->SourceHandle >= EMS_MAX_HANDLES || !HandleEntry->Allocated)
|
if (HandleEntry == NULL || !HandleEntry->Allocated)
|
||||||
{
|
{
|
||||||
setAL(EMS_STATUS_INVALID_HANDLE);
|
setAL(EMS_STATUS_INVALID_HANDLE);
|
||||||
break;
|
break;
|
||||||
|
@ -253,9 +262,9 @@ static VOID WINAPI EmsIntHandler(LPWORD Stack)
|
||||||
if (Data->DestType)
|
if (Data->DestType)
|
||||||
{
|
{
|
||||||
/* Expanded memory */
|
/* Expanded memory */
|
||||||
HandleEntry = &HandleTable[Data->DestHandle];
|
HandleEntry = GetHandleRecord(Data->DestHandle);
|
||||||
|
|
||||||
if (Data->SourceHandle >= EMS_MAX_HANDLES || !HandleEntry->Allocated)
|
if (HandleEntry == NULL || !HandleEntry->Allocated)
|
||||||
{
|
{
|
||||||
setAL(EMS_STATUS_INVALID_HANDLE);
|
setAL(EMS_STATUS_INVALID_HANDLE);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -46,9 +46,10 @@ static ULONG BitmapBuffer[(XMS_BLOCKS + 31) / 32];
|
||||||
|
|
||||||
static inline PXMS_HANDLE GetHandleRecord(WORD Handle)
|
static inline PXMS_HANDLE GetHandleRecord(WORD Handle)
|
||||||
{
|
{
|
||||||
PXMS_HANDLE Entry = &HandleTable[Handle - 1];
|
PXMS_HANDLE Entry;
|
||||||
if (Handle == 0 || Handle >= XMS_MAX_HANDLES) return NULL;
|
if (Handle == 0 || Handle >= XMS_MAX_HANDLES) return NULL;
|
||||||
|
|
||||||
|
Entry = &HandleTable[Handle - 1];
|
||||||
return Entry->Size ? Entry : NULL;
|
return Entry->Size ? Entry : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue