Fix WebView.EvaluateJavaScript API crash 30/230030/1
authorJiyun Yang <ji.yang@samsung.com>
Tue, 7 Apr 2020 08:26:28 +0000 (17:26 +0900)
committerJiyun Yang <ji.yang@samsung.com>
Tue, 7 Apr 2020 08:28:26 +0000 (17:28 +0900)
When result handler is null, it will no execute handler.

Change-Id: Ieaae745ecf41b19708a789315ae75f238e0f9e66
Signed-off-by: Jiyun Yang <ji.yang@samsung.com>
dali-extension/web-engine-chromium/tizen-web-engine-chromium.cpp

index e281cb3..e3fa0d9 100644 (file)
@@ -625,14 +625,22 @@ void TizenWebEngineChromium::EvaluateJavaScript( const std::string& script, std:
 {
   if( mWebViewContainer )
   {
-    if( mJavaScriptEvaluationResultHandlers.emplace( mJavaScriptEvaluationCount, resultHandler ).second )
+    bool badAlloc = false;
+
+    try
     {
-      mWebViewContainer->EvaluateJavaScript( mJavaScriptEvaluationCount++, script );
+      mJavaScriptEvaluationResultHandlers.emplace( mJavaScriptEvaluationCount, resultHandler );
     }
-    else
+    catch( std::bad_alloc &e )
     {
+      badAlloc = true;
       DALI_LOG_ERROR( "Too many ongoing JavaScript evaluations." );
     }
+
+    if( !badAlloc )
+    {
+      mWebViewContainer->EvaluateJavaScript( mJavaScriptEvaluationCount++, script );
+    }
   }
 }
 
@@ -876,8 +884,11 @@ void TizenWebEngineChromium::RunJavaScriptEvaluationResultHandler( size_t key, c
     return;
   }
 
-  std::string stored( result );
-  handler->second( stored );
+  if( handler->second )
+  {
+    std::string stored( result );
+    handler->second( stored );
+  }
 
   mJavaScriptEvaluationResultHandlers.erase( handler );
 }