Fixed log_id() memory corruption
authorClifford Wolf <clifford@clifford.at>
Sat, 19 Jul 2014 18:53:29 +0000 (20:53 +0200)
committerClifford Wolf <clifford@clifford.at>
Sat, 19 Jul 2014 18:53:29 +0000 (20:53 +0200)
kernel/log.cc
kernel/log.h

index b2c92e4e1ab31e3503bd1273e6693d57ec575237..3108bddfe21d31c12e01c9254745ca8cfe4105cb 100644 (file)
@@ -205,3 +205,11 @@ const char *log_signal(const RTLIL::SigSpec &sig, bool autoint)
        return string_buf.back().c_str();
 }
 
+const char *log_id(std::string str)
+{
+       if (str.size() > 1 && str[0] == '\\' && str[1] != '$')
+               string_buf.push_back(str.substr(1));
+       else
+               string_buf.push_back(str);
+       return string_buf.back().c_str();
+}
index 3e280a6f611fc3da6d07c0bb91a6869336140f7c..2c3597c9af4dca5035d027b486cb1a94c7f8bfcb 100644 (file)
@@ -51,13 +51,10 @@ void log_reset_stack();
 void log_flush();
 
 const char *log_signal(const RTLIL::SigSpec &sig, bool autoint = true);
-
-static inline const char *log_id(std::string id) {
-       return RTLIL::id2cstr(id);
-}
+const char *log_id(std::string id);
 
 template<typename T> static inline const char *log_id(T *obj) {
-       return RTLIL::id2cstr(obj->name);
+       return log_id(obj->name);
 }
 
 #define log_abort() log_error("Abort in %s:%d.\n", __FILE__, __LINE__)