AutomationController: Bug fix for string use after free.

Change-Id: Iaa39ed9c21e60b3c069d3b0627e9401d82aca5f7
diff --git a/android-qemu2-glue/qemu-automation-agent-impl.cpp b/android-qemu2-glue/qemu-automation-agent-impl.cpp
index da2d767..c6c3ff5 100644
--- a/android-qemu2-glue/qemu-automation-agent-impl.cpp
+++ b/android-qemu2-glue/qemu-automation-agent-impl.cpp
@@ -46,8 +46,7 @@
     AutomationController::get().setMacroName(macroName, filename);
 }
 
-static android::base::StringView get_macro_name(
-        android::base::StringView filename) {
+static std::string get_macro_name(android::base::StringView filename) {
     return AutomationController::get().getMacroName(filename);
 }
 
diff --git a/android/android-emu/android/automation/AutomationController.cpp b/android/android-emu/android/automation/AutomationController.cpp
index 716a39b..0e9694a 100644
--- a/android/android-emu/android/automation/AutomationController.cpp
+++ b/android/android-emu/android/automation/AutomationController.cpp
@@ -372,7 +372,7 @@
 
     // MacroUI helper functions.
     void setMacroName(StringView macroName, StringView filename) override;
-    StringView getMacroName(StringView filename) override;
+    std::string getMacroName(StringView filename) override;
     uint64_t getDurationNs(StringView filename) override;
 
     ReplayResult replayInitialState(StringView state) override;
@@ -714,7 +714,7 @@
     return Ok();
 }
 
-StringView AutomationControllerImpl::getMacroName(StringView filename) {
+std::string AutomationControllerImpl::getMacroName(StringView filename) {
     std::string path = filename;
     if (!PathUtils::isAbsolute(path)) {
         path = PathUtils::join(System::get()->getHomeDirectory(), filename);
@@ -731,9 +731,7 @@
         return "";
     }
 
-    // Cast to std::string before casting to Stringview.
-    const std::string result = header.name();
-    return result;
+    return header.name();
 }
 
 uint64_t AutomationControllerImpl::getDurationNs(StringView filename) {
diff --git a/android/android-emu/android/automation/AutomationController.h b/android/android-emu/android/automation/AutomationController.h
index bb683e4..71d5b3f 100644
--- a/android/android-emu/android/automation/AutomationController.h
+++ b/android/android-emu/android/automation/AutomationController.h
@@ -137,8 +137,7 @@
                               android::base::StringView filename) = 0;
 
     // Get the macro name from the header of a file.
-    virtual android::base::StringView getMacroName(
-            android::base::StringView filename) = 0;
+    virtual std::string getMacroName(android::base::StringView filename) = 0;
 
     // Get the duration in nanoseconds from a file.
     virtual uint64_t getDurationNs(android::base::StringView filename) = 0;
diff --git a/android/android-emu/android/emulation/control/automation_agent.h b/android/android-emu/android/emulation/control/automation_agent.h
index a8e402700..db4f441 100644
--- a/android/android-emu/android/emulation/control/automation_agent.h
+++ b/android/android-emu/android/emulation/control/automation_agent.h
@@ -43,7 +43,7 @@
     void (*setMacroName)(StringView macroName, StringView filename);
 
     // Get the macro name from the header of a file.
-    StringView (*getMacroName)(StringView filename);
+    std::string (*getMacroName)(StringView filename);
 
     // Get the duration in nanoseconds from a file.
     uint64_t (*getDurationNs)(StringView filename);
diff --git a/android/android-emu/android/skin/qt/extended-pages/record-macro-page.cpp b/android/android-emu/android/skin/qt/extended-pages/record-macro-page.cpp
index acb8671..8eb05c2 100644
--- a/android/android-emu/android/skin/qt/extended-pages/record-macro-page.cpp
+++ b/android/android-emu/android/skin/qt/extended-pages/record-macro-page.cpp
@@ -783,7 +783,7 @@
         mLengths[macroName] = qs;
 
         macroSavedItem->setDisplayTime(mLengths[macroName]);
-        macroName = sAutomationAgent->getMacroName(filePath).str();
+        macroName = sAutomationAgent->getMacroName(filePath);
         connect(macroSavedItem,
                 SIGNAL(editButtonClickedSignal(RecordMacroSavedItem*)), this,
                 SLOT(editButtonClicked(RecordMacroSavedItem*)));