[XWalkExtension] Fix dangling issue of GetMetadataValue 31/308931/4 submit/tizen/20240407.160014
authorDongHyun Song <dh81.song@samsung.com>
Wed, 3 Apr 2024 00:54:38 +0000 (09:54 +0900)
committerBot Blink <blinkbot@samsung.com>
Sun, 7 Apr 2024 09:46:14 +0000 (09:46 +0000)
It cannot return local std::string's c_str() value as a return
value. It can be a dangling pointer.

Change-Id: I6e00b594e267433b17f56998886fd9344c9d0a80
Signed-off-by: DongHyun Song <dh81.song@samsung.com>
tizen_src/chromium_impl/components/xwalk_extensions/browser/xwalk_extension.cc
tizen_src/chromium_impl/components/xwalk_extensions/public/XW_Extension_Runtime.h

index b4df023..247f283 100644 (file)
@@ -165,10 +165,13 @@ class XWalkExtension::Interface {
     extension_manager->SendMouseEvent(event, btn, x, y);
   }
 
-  static const char* RuntimeGetMetadataValue(const char* key) {
+  static void RuntimeGetMetadataValue(const char* key,
+                                      char* value,
+                                      unsigned int len) {
     auto* extension_manager = XWalkExtensionManager::GetInstance();
-    auto value = extension_manager->GetMetadataValue(key);
-    return strdup(value.c_str());
+    auto metadata_value = extension_manager->GetMetadataValue(key);
+    if (!metadata_value.empty())
+      std::snprintf(value, len, "%s", metadata_value.c_str());
   }
 
   static int PermissionsCheckAPIAccessControl(
index d7b3cea..7d284a7 100644 (file)
@@ -45,7 +45,7 @@ typedef struct XW_Internal_WindowInterface_ {
   void (*RemoveWindowEventListener)(XW_Instance instance);
   void (*SendKeyEvent)(const char* event, const char* key_code);
   void (*SendMouseEvent)(const char* event, int button, int x, int y);
-  const char* (*GetMetadataValue)(const char* key);
+  void (*GetMetadataValue)(const char* key, char* value, unsigned int len);
 } XW_Internal_WindowInterface;
 
 #ifdef __cplusplus