libcamera: base: log: Fix use of freed name

LogCategory just stores the char * that was given to it in the
constructor, i.e. it refers to memory "outside" LogCategory. If the
LogCategory is defined in a .so that is unloaded, then it leads to the
LogCategory pointing to freed memory, causing a crash.

Fix this by taking a copy of the name by using a std::string instead of
just storing the pointer.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Tomi Valkeinen
2022-10-20 02:41:48 +03:00
committed by Laurent Pinchart
parent 376adeb7b7
commit 662df4ca26
2 changed files with 3 additions and 3 deletions
+2 -2
View File
@@ -31,14 +31,14 @@ class LogCategory
public:
explicit LogCategory(const char *name);
const char *name() const { return name_; }
const std::string &name() const { return name_; }
LogSeverity severity() const { return severity_; }
void setSeverity(LogSeverity severity);
static const LogCategory &defaultCategory();
private:
const char *name_;
const std::string name_;
LogSeverity severity_;
};
+1 -1
View File
@@ -568,7 +568,7 @@ void Logger::logSetLevel(const char *category, const char *level)
return;
for (LogCategory *c : categories_) {
if (!strcmp(c->name(), category)) {
if (c->name() == category) {
c->setSeverity(severity);
break;
}