diff options
author | DS <vorunbekannt75@web.de> | 2020-03-10 20:32:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-10 20:32:38 +0100 |
commit | b42493fb4c40611020c9ded9b7af5b96dc4148bd (patch) | |
tree | b61a502308b865fa3c1160129339aea9df65a005 /src | |
parent | 7a7bfdca7c2dcbfe40467f64544112551abd7316 (diff) | |
download | minetest-b42493fb4c40611020c9ded9b7af5b96dc4148bd.tar.gz minetest-b42493fb4c40611020c9ded9b7af5b96dc4148bd.tar.bz2 minetest-b42493fb4c40611020c9ded9b7af5b96dc4148bd.zip |
Fix memory leak in GUIHyperText (#9489)
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/guiFormSpecMenu.cpp | 5 | ||||
-rw-r--r-- | src/gui/guiHyperText.cpp | 6 | ||||
-rw-r--r-- | src/gui/guiHyperText.h | 2 |
3 files changed, 7 insertions, 6 deletions
diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index e1bb58f17..45eb0d17c 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -1654,8 +1654,9 @@ void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &elemen ); spec.ftype = f_Unknown; - new GUIHyperText( - spec.flabel.c_str(), Environment, this, spec.fid, rect, m_client, m_tsrc); + GUIHyperText *e = new GUIHyperText(spec.flabel.c_str(), Environment, this, + spec.fid, rect, m_client, m_tsrc); + e->drop(); m_fields.push_back(spec); } diff --git a/src/gui/guiHyperText.cpp b/src/gui/guiHyperText.cpp index 7b7d3a1b2..68fb8ea3d 100644 --- a/src/gui/guiHyperText.cpp +++ b/src/gui/guiHyperText.cpp @@ -109,7 +109,6 @@ ParsedText::ParsedText(const wchar_t *text) m_root_tag.style["color"] = "#EEEEEE"; m_root_tag.style["hovercolor"] = m_root_tag.style["color"]; - m_tags.push_back(&m_root_tag); m_active_tags.push_front(&m_root_tag); m_style = m_root_tag.style; @@ -174,7 +173,7 @@ ParsedText::ParsedText(const wchar_t *text) ParsedText::~ParsedText() { - for (auto &tag : m_tags) + for (auto &tag : m_not_root_tags) delete tag; } @@ -289,7 +288,7 @@ ParsedText::Tag *ParsedText::newTag(const std::string &name, const AttrsList &at Tag *newtag = new Tag(); newtag->name = name; newtag->attrs = attrs; - m_tags.push_back(newtag); + m_not_root_tags.push_back(newtag); return newtag; } @@ -1012,6 +1011,7 @@ GUIHyperText::GUIHyperText(const wchar_t *text, IGUIEnvironment *environment, GUIHyperText::~GUIHyperText() { m_vscrollbar->remove(); + m_vscrollbar->drop(); } ParsedText::Element *GUIHyperText::getElementAt(s32 X, s32 Y) diff --git a/src/gui/guiHyperText.h b/src/gui/guiHyperText.h index 3ea8732cd..093c84ccd 100644 --- a/src/gui/guiHyperText.h +++ b/src/gui/guiHyperText.h @@ -153,7 +153,7 @@ protected: std::unordered_map<std::string, StyleList> m_elementtags; std::unordered_map<std::string, StyleList> m_paragraphtags; - std::vector<Tag *> m_tags; + std::vector<Tag *> m_not_root_tags; std::list<Tag *> m_active_tags; // Current values |