This is an automated email from the ASF dual-hosted git repository.

luckychen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-weex.git


The following commit(s) were added to refs/heads/master by this push:
     new ec1ec23  * [Android] Avoid ArrayIndexOutOfBounds in 
RenderPage::MoveRenderObject (#2919)
ec1ec23 is described below

commit ec1ec238cf03e538e8d07a383befcb5fa2785518
Author: YorkShen <[email protected]>
AuthorDate: Mon Sep 23 14:59:00 2019 +0800

    * [Android] Avoid ArrayIndexOutOfBounds in RenderPage::MoveRenderObject 
(#2919)
    
    * * [Android] Avoid ArrayIndexOutOfBounds in RenderPage::MoveRenderObject
    
    * Update import
---
 .../src/main/java/com/taobao/weex/bridge/WXBridgeManager.java  |  3 +++
 .../sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java  |  3 +++
 weex_core/Source/core/render/page/render_page.cpp              | 10 ++++++++++
 3 files changed, 16 insertions(+)

diff --git 
a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java 
b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index 94ac0cd..1c81ede 100755
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -152,6 +152,7 @@ public class WXBridgeManager implements Callback, 
BactchExecutor {
   public static final String METHOD_UPDATE_COMPONENT_WITH_DATA = 
"UpdateComponentData";
   private static final String METHOD_POST_TASK_TO_MSG_LOOP = 
"PostTaskToMsgLoop";
   private static final String METHOD_JSFM_NOT_INIT_IN_EAGLE_MODE = 
"JsfmNotInitInEagleMode";
+  private static final String METHOD_MOVE_RENDER_OBJECT = 
"RenderPage::MoveRenderObject";
   public static final String METHOD_DESTROY_INSTANCE = "destroyInstance";
   public static final String METHOD_CALL_JS = "callJS";
   public static final String METHOD_SET_TIMEOUT = "setTimeoutCallback";
@@ -2585,6 +2586,8 @@ public class WXBridgeManager implements Callback, 
BactchExecutor {
               METHOD_JSFM_NOT_INIT_IN_EAGLE_MODE.equals(function) )
           && !instance.getApmForInstance().hasAddView){
         reportErrorCode = WXErrorCode.WX_DEGRAD_EAGLE_RENDER_ERROR;
+      } else if (METHOD_MOVE_RENDER_OBJECT.equals(function)) {
+        reportErrorCode = 
WXErrorCode.WX_ERROR_MOVE_RENDER_OBJECT_OUT_OF_BOUNDS;
       }
       instance.onJSException(reportErrorCode.getErrorCode(), function, 
exception);
     }
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java 
b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
index 56029ac..e15eb08 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
@@ -276,6 +276,9 @@ public enum WXErrorCode {
 
   WX_ERR_HASH_MAP_TMP("-10010", 
"WX_ERR_HASH_MAP_TMP",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE),
 
+  WX_ERROR_MOVE_RENDER_OBJECT_OUT_OF_BOUNDS("-2120", "Index out of bounds when 
move element",
+      ErrorType.NATIVE_ERROR, ErrorGroup.JS),
+
   /**
    * TEST
    */
diff --git a/weex_core/Source/core/render/page/render_page.cpp 
b/weex_core/Source/core/render/page/render_page.cpp
index f13b271..7560848 100755
--- a/weex_core/Source/core/render/page/render_page.cpp
+++ b/weex_core/Source/core/render/page/render_page.cpp
@@ -221,6 +221,16 @@ bool RenderPage::MoveRenderObject(const std::string &ref,
     }
   }
 
+  if(index > new_parent->getChildCount()){
+    std::stringstream msg;
+    msg << "Out of array bounds when RenderPage::MoveRenderObject, specified 
index: "
+    << index << "array size " << new_parent->getChildCount();
+
+    WeexCore::WeexCoreManager::Instance()->getPlatformBridge()->platform_side()
+    ->ReportException(page_id().c_str(), "RenderPage::MoveRenderObject", 
msg.str().c_str());
+    return false;
+  }
+
   set_is_dirty(true);
   child->getParent()->removeChild(child);
   new_parent->addChildAt(child, index);

Reply via email to