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);