Fixed crash due to improper ScriptPointer usage

This commit is contained in:
smallmodel committed 2023-08-17 03:03:40 +02:00
1 parent bdcd0dbd56
commit 8487099264
1 file changed
+24 -5
+24 -5
View File
@@ -350,7 +350,7 @@ void ScriptPointer::remove(ScriptVariable *var)
{
list.RemoveObject(var);
if (!list.NumObjects()) {
if (list.NumObjects() == 0) {
delete this;
}
}
@@ -360,11 +360,23 @@ void ScriptPointer::setValue(const ScriptVariable& var)
int i;
ScriptVariable *pVar;
for (i = list.NumObjects(); i > 0; i--) {
pVar = list.ObjectAt(i);
if (var.type == VARIABLE_POINTER)
{
for (i = list.NumObjects(); i > 0; i--) {
pVar = list.ObjectAt(i);
pVar->type = 0;
*pVar = var;
pVar->m_data.pointerValue = var.m_data.pointerValue;
var.m_data.pointerValue->add(pVar);
}
}
else
{
for (i = list.NumObjects(); i > 0; i--) {
pVar = list.ObjectAt(i);
pVar->type = 0;
*pVar = var;
}
}
delete this;
@@ -2076,6 +2088,13 @@ ScriptVariable& ScriptVariable::operator=(ScriptVariable&& variable)
m_data = variable.m_data;
variable.type = VARIABLE_NONE;
if (type == VARIABLE_POINTER)
{
// if it's a pointer, make sure to properly point
m_data.pointerValue->add(this);
m_data.pointerValue->remove(&variable);
}
return *this;
}