From 479c2368356bb36d2c9a06bf229449a450632def Mon Sep 17 00:00:00 2001 From: badlogic Date: Wed, 30 Oct 2019 15:48:55 +0100 Subject: [PATCH] [cpp] Change traversal order of Json::~Json(). Old order would grow stack much more than needed, leading to crashes when freeing big Json trees. --- spine-cpp/spine-cpp/src/spine/Json.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/spine-cpp/spine-cpp/src/spine/Json.cpp b/spine-cpp/spine-cpp/src/spine/Json.cpp index dc97aba77..daf82e490 100644 --- a/spine-cpp/spine-cpp/src/spine/Json.cpp +++ b/spine-cpp/spine-cpp/src/spine/Json.cpp @@ -120,17 +120,23 @@ Json::Json(const char *value) : } Json::~Json() { - delete _child; + spine::Json* curr = nullptr; + spine::Json* next = _child; + do { + curr = next; + if (curr) { + next = curr->_next; + } + delete curr; + } while(next); - if (_valueString) { - SpineExtension::free(_valueString, __FILE__, __LINE__); - } + if (_valueString) { + SpineExtension::free(_valueString, __FILE__, __LINE__); + } - if (_name) { - SpineExtension::free(_name, __FILE__, __LINE__); - } - - delete _next; + if (_name) { + SpineExtension::free(_name, __FILE__, __LINE__); + } } const char *Json::skip(const char *inValue) {