Fix crash in CloneArray for too large arrays (#566)

If there is not enough memory to clone an array, throw an error instead
of crashing the server.
This commit is contained in:
peace-maker 2016-12-11 21:55:11 -07:00 committed by Kyle Sanderson
parent d3d16a93cf
commit b74573fa12
2 changed files with 10 additions and 0 deletions

View File

@ -186,6 +186,12 @@ public:
array->m_AllocSize = m_AllocSize;
array->m_Size = m_Size;
array->m_Data = (cell_t *)malloc(sizeof(cell_t) * m_BlockSize * m_AllocSize);
if (!array->m_Data)
{
delete array;
return NULL;
}
memcpy(array->m_Data, m_Data, sizeof(cell_t) * m_BlockSize * m_Size);
return array;
}

View File

@ -503,6 +503,10 @@ static cell_t CloneArray(IPluginContext *pContext, const cell_t *params)
}
ICellArray *array = oldArray->clone();
if (!array)
{
return pContext->ThrowNativeError("Failed to clone array. Out of memory.");
}
Handle_t hndl = handlesys->CreateHandle(htCellArray, array, pContext->GetIdentity(), g_pCoreIdent, NULL);
if (!hndl)