Fix for perl scripts passing non-client objects to API handler for MovePC and MovePCInstance. [Fixes #127]

This commit is contained in:
Uleat
2014-08-18 22:13:15 -04:00
parent 69b7d500d8
commit 43326c1804
3 changed files with 35 additions and 4 deletions
+1 -2
View File
@@ -253,8 +253,7 @@ void Doors::HandleClick(Client* sender, uint8 trigger)
strcpy(tmpmsg, "Door is locked by an unknown guild");
}
sender->Message(4, tmpmsg);
// safe_delete(outapp);
// /\ possible missing line..all other 'fail' returns seem to have it
safe_delete(outapp);
return;
}
// a key is required or the door is locked but can be picked or both
+31 -2
View File
@@ -1259,7 +1259,22 @@ XS(XS_Client_MovePC)
if(THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->MovePC(zoneID, x, y, z, heading);
if (THIS->IsClient()) {
THIS->MovePC(zoneID, x, y, z, heading);
}
else {
if (THIS->IsBot())
_log(CLIENT__ERROR, "Perl(XS_Client_MovePC) attempted to process a type Bot reference");
else if (THIS->IsMerc())
_log(CLIENT__ERROR, "Perl(XS_Client_MovePC) attempted to process a type Merc reference");
else if (THIS->IsNPC())
_log(CLIENT__ERROR, "Perl(XS_Client_MovePC) attempted to process a type NPC reference");
else
_log(CLIENT__ERROR, "Perl(XS_Client_MovePC) attempted to process an Unknown type reference");
Perl_croak(aTHX_ "THIS is not of type Client");
}
}
XSRETURN_EMPTY;
}
@@ -1288,7 +1303,21 @@ XS(XS_Client_MovePCInstance)
if(THIS == nullptr)
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
THIS->MovePC(zoneID, instanceID, x, y, z, heading);
if (THIS->IsClient()) {
THIS->MovePC(zoneID, instanceID, x, y, z, heading);
}
else {
if (THIS->IsBot())
_log(CLIENT__ERROR, "Perl(XS_Client_MovePCInstance) attempted to process a type Bot reference");
else if (THIS->IsMerc())
_log(CLIENT__ERROR, "Perl(XS_Client_MovePCInstance) attempted to process a type Merc reference");
else if (THIS->IsNPC())
_log(CLIENT__ERROR, "Perl(XS_Client_MovePCInstance) attempted to process a type NPC reference");
else
_log(CLIENT__ERROR, "Perl(XS_Client_MovePCInstance) attempted to process an Unknown type reference");
Perl_croak(aTHX_ "THIS is not of type Client");
}
}
XSRETURN_EMPTY;
}