bugfix: AbstractEvent didn't disconnect handlers

causing use after free
Dieser Commit ist enthalten in:
Reinder Feenstra 2022-05-29 00:20:19 +02:00
Ursprung feab3a6c52
Commit bc7025d9eb
2 geänderte Dateien mit 7 neuen und 0 gelöschten Zeilen

Datei anzeigen

@ -30,6 +30,12 @@ AbstractEvent::AbstractEvent(Object& object, std::string_view name, EventFlags f
{ {
} }
AbstractEvent::~AbstractEvent()
{
while(!m_handlers.empty())
m_handlers.front()->disconnect();
}
void AbstractEvent::connect(std::shared_ptr<AbstractEventHandler> handler) void AbstractEvent::connect(std::shared_ptr<AbstractEventHandler> handler)
{ {
assert(handler); assert(handler);

Datei anzeigen

@ -43,6 +43,7 @@ class AbstractEvent : public InterfaceItem
public: public:
AbstractEvent(Object& object, std::string_view name, EventFlags m_flags); AbstractEvent(Object& object, std::string_view name, EventFlags m_flags);
~AbstractEvent() override;
inline bool isScriptable() const { return (m_flags & EventFlags::Scriptable) == EventFlags::Scriptable; } inline bool isScriptable() const { return (m_flags & EventFlags::Scriptable) == EventFlags::Scriptable; }