Repository: incubator-weex
Updated Branches:
  refs/heads/master 900967124 -> dd8b7e1a8


[WEEX-105][iOS] bug-fix about setting nan frame crash

try to protect nan crash when set frame containing nan value.
Last Exception Backtrace:
0   CoreFoundation                  0x00000001830301c0 __exceptionPreprocess 
:124 (in CoreFoundation)
1   libobjc.A.dylib                 0x0000000181a6855c _objc_exception_throw 
:56 (in libobjc.A.dylib)
2   CoreFoundation                  0x0000000183030108 +[NSException 
raise:format:] :116 (in CoreFoundation)
3   QuartzCore                      0x0000000186335db8 
CA::Layer::set_position(CA::Vec2 const&, bool) :152 (in QuartzCore)
4   QuartzCore                      0x0000000186335f2c -[CALayer setPosition:] 
:40 (in QuartzCore)
5   QuartzCore                      0x00000001863364c4 -[CALayer setFrame:] 
:448 (in QuartzCore)
6   UIKit                           0x0000000188e71e2c -[UIView(Geometry) 
setFrame:] :784 (in UIKit)
7   Taobao4iPhone                   0x0000000102d6ad4c _43-[WXComponent(Layout) 
_frameDidCalculated:]_block_invoke WXComponent+Layout.m:136

Last Exception Backtrace 2:
0   CoreFoundation                  0x0000000185b12fe0 __exceptionPreprocess 
:124 (in CoreFoundation)
1   libobjc.A.dylib                 0x0000000184574538 _objc_exception_throw 
:56 (in libobjc.A.dylib)
2   CoreFoundation                  0x0000000185b12f28 +[NSException 
raise:format:] :116 (in CoreFoundation)
3   QuartzCore                      0x0000000188e29798 
CA::Layer::set_bounds(CA::Rect const&, bool) :204 (in QuartzCore)
4   QuartzCore                      0x0000000188e299e0 -[CALayer setBounds:] 
:100 (in QuartzCore)
5   UIKit                           0x000000018bc908c8 -[UIView(Geometry) 
setBounds:] :404 (in UIKit)
6   UIKit                           0x000000018bc9eacc -[UIScrollView 
setBounds:] :988 (in UIKit)
7   UIKit                           0x000000018bd271c8 -[UITableView 
setBounds:] :224 (in UIKit)
8   UIKit                           0x000000018bc62828 -[UIScrollView 
setContentOffset:] :400 (in UIKit)
9   UIKit                           0x000000018bd191dc -[UITableView 
setContentOffset:] :272 (in UIKit)
10  Taobao4iPhone                   0x0000000102d7b6e8 -[WXTableView 
setContentOffset:] WXListComponent.m:63 (in Taobao4iPhone)
11  UIKit                           0x000000018bde6d08 -[UIScrollView 
_updatePanGesture] :1988 (in UIKit)
12  UIKit                           0x000000018c2168d0 
-[UIGestureRecognizerTarget _sendActionWithGestureRecognizer:] :64 (in UIKit)
13  UIKit                           0x000000018c21a104 
_UIGestureRecognizerSendTargetActions :124 (in UIKit)
14  UIKit                           0x000000018bdd40b4 
_UIGestureRecognizerSendActions :252 (in UIKit)

Bug: 105


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/784fd75d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/784fd75d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/784fd75d

Branch: refs/heads/master
Commit: 784fd75d324c2034a362a79251a87c295eb9fbea
Parents: d731f4d
Author: acton393 <[email protected]>
Authored: Mon Nov 13 15:08:15 2017 +0800
Committer: acton393 <[email protected]>
Committed: Mon Nov 13 15:08:15 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK/Sources/Component/WXListComponent.m | 6 ++++++
 ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m | 8 ++++----
 2 files changed, 10 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/784fd75d/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m 
b/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
index 7c4fe68..ddfaf6f 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
@@ -58,6 +58,12 @@
     if (fabs(contentOffset.y) < 0.5) {
         contentOffset.y = 0;
     }
+    if (isnan(contentOffset.x)) {
+        contentOffset.x = 0;
+    }
+    if(isnan(contentOffset.y)) {
+        contentOffset.y = 0;
+    }
     
     [super setContentOffset:contentOffset];
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/784fd75d/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m 
b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m
index adf1652..44aef1c 100644
--- a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m
+++ b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m
@@ -166,10 +166,10 @@
     _cssNode->layout.should_update = false;
     _isLayoutDirty = NO;
     
-    CGRect newFrame = 
CGRectMake(WXRoundPixelValue(_cssNode->layout.position[CSS_LEFT]),
-                                 
WXRoundPixelValue(_cssNode->layout.position[CSS_TOP]),
-                                 
WXRoundPixelValue(_cssNode->layout.dimensions[CSS_WIDTH]),
-                                 
WXRoundPixelValue(_cssNode->layout.dimensions[CSS_HEIGHT]));
+    CGRect newFrame = 
CGRectMake(isnan(WXRoundPixelValue(_cssNode->layout.position[CSS_LEFT]))?0:WXRoundPixelValue(_cssNode->layout.position[CSS_LEFT]),
+                                 
isnan(WXRoundPixelValue(_cssNode->layout.position[CSS_TOP]))?0:WXRoundPixelValue(_cssNode->layout.position[CSS_TOP]),
+                                 
isnan(WXRoundPixelValue(_cssNode->layout.dimensions[CSS_WIDTH]))?0:WXRoundPixelValue(_cssNode->layout.dimensions[CSS_WIDTH]),
+                                 
isnan(WXRoundPixelValue(_cssNode->layout.dimensions[CSS_HEIGHT]))?0:WXRoundPixelValue(_cssNode->layout.dimensions[CSS_HEIGHT]));
     
     BOOL isFrameChanged = NO;
     if (!CGRectEqualToRect(newFrame, _calculatedFrame)) {

Reply via email to