From 0773f40a8e6c6e9ecfbf91ce732bd898dce4f6b5 Mon Sep 17 00:00:00 2001 From: Elliot Goodrich Date: Tue, 6 Jan 2015 09:12:55 +0000 Subject: [PATCH] Fix double delete on std::bad_alloc exception If the new operator throws in the json::find methods then result.oi_ is deleted again in the destructor of json::iterator/json::const_iterator, which is a double delete and undefined behaviour. --- src/json.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/json.cc b/src/json.cc index 0b86a148..409fddbf 100644 --- a/src/json.cc +++ b/src/json.cc @@ -1192,6 +1192,7 @@ json::iterator json::find(const char* key) { json::iterator result(this); delete result.oi_; + result.oi_ = nullptr; result.oi_ = new object_t::iterator(i); return result; } @@ -1215,6 +1216,7 @@ json::const_iterator json::find(const char* key) const { json::const_iterator result(this); delete result.oi_; + result.oi_ = nullptr; result.oi_ = new object_t::const_iterator(i); return result; }