Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
plug a memleak on parse error :)
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Tue, 19 Nov 2019 00:33:19 +0000 (01:33 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Tue, 19 Nov 2019 00:33:24 +0000 (01:33 +0100)
The most important fix ever!

include/simgrid/Exception.hpp

index 7f3918f..ad3498a 100644 (file)
@@ -162,17 +162,17 @@ class XBT_PUBLIC ParseError : public Exception, public std::invalid_argument {
   int line_;
   std::string file_;
   std::string msg_;
+  char* rendered_what = nullptr;
 
 public:
   ParseError(int line, std::string& file, std::string&& msg)
       : Exception(XBT_THROW_POINT, std::move(msg)), std::invalid_argument(msg), line_(line), file_(file), msg_(msg)
   {
+    rendered_what = bprintf("Parse error at %s:%d: %s", file_.c_str(), line_, msg_.c_str());
   }
+  ~ParseError() { free(rendered_what); }
 
-  const char* what() const noexcept override
-  {
-    return bprintf("Parse error at %s:%d: %s", file_.c_str(), line_, msg_.c_str());
-  }
+  const char* what() const noexcept override { return rendered_what; }
 };
 
 class XBT_PUBLIC ForcefulKillException {