Guard against bad values set in RCTCustomScrollView
Summary: UIScrollView's internal logic with scroll indicator dies when bad values (e.g. NaN/Infinity) are set on the position/size. We already guard UIManager with these checks but the RCTScrollView's underlying scrollview (RCTCustomScrollView) can get these set from other places, and we're seeing crashes in this area. Reviewed By: javache Differential Revision: D4088601 fbshipit-source-id: b1185cc7c65ba0266787441169264c94338fc55c
This commit is contained in:
Родитель
aa4428cd13
Коммит
97153d68cf
|
@ -364,6 +364,33 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init)
|
||||||
return [super hitTest:point withEvent:event];
|
return [super hitTest:point withEvent:event];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline BOOL isRectInvalid(CGRect rect) {
|
||||||
|
return isnan(rect.origin.x) || isinf(rect.origin.x) ||
|
||||||
|
isnan(rect.origin.y) || isinf(rect.origin.y) ||
|
||||||
|
isnan(rect.size.width) || isinf(rect.size.width) ||
|
||||||
|
isnan(rect.size.height) || isinf(rect.size.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setBounds:(CGRect)bounds
|
||||||
|
{
|
||||||
|
if (isRectInvalid(bounds)) {
|
||||||
|
RCTLogError(@"Attempted to set an invalid bounds to inner scrollview: %@", NSStringFromCGRect(bounds));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[super setBounds:bounds];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setFrame:(CGRect)frame
|
||||||
|
{
|
||||||
|
if (isRectInvalid(frame)) {
|
||||||
|
RCTLogError(@"Attempted to set an invalid frame to inner scrollview: %@", NSStringFromCGRect(frame));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[super setFrame:frame];
|
||||||
|
}
|
||||||
|
|
||||||
#if !TARGET_OS_TV
|
#if !TARGET_OS_TV
|
||||||
- (void)setRctRefreshControl:(RCTRefreshControl *)refreshControl
|
- (void)setRctRefreshControl:(RCTRefreshControl *)refreshControl
|
||||||
{
|
{
|
||||||
|
|
Загрузка…
Ссылка в новой задаче