From b9af5040ca99cf416fee54ccf189850169aca2ca Mon Sep 17 00:00:00 2001 From: Adlai Holler Date: Wed, 24 May 2017 11:15:58 -0700 Subject: [PATCH 1/2] Add a non-fatal assertion for setting invalid layer bounds. --- Source/Base/ASAssert.h | 12 ++++++++---- Source/Details/_ASDisplayLayer.mm | 4 ++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Source/Base/ASAssert.h b/Source/Base/ASAssert.h index 20476f450..47022c5ee 100644 --- a/Source/Base/ASAssert.h +++ b/Source/Base/ASAssert.h @@ -69,9 +69,11 @@ #define ASDisplayNodeErrorDomain @"ASDisplayNodeErrorDomain" #define ASDisplayNodeNonFatalErrorCode 1 -#define ASDisplayNodeAssertNonFatal(condition, desc, ...) \ - ASDisplayNodeAssert(condition, desc, ##__VA_ARGS__); \ - if (condition == NO) { \ +/// Returns YES if assertion passed, NO otherwise. +#define ASDisplayNodeAssertNonFatal(condition, desc, ...) ({ \ + BOOL __evaluated = condition; \ + if (__evaluated == NO) { \ + ASDisplayNodeFailAssert(desc, ##__VA_ARGS__); \ ASDisplayNodeNonFatalErrorBlock block = [ASDisplayNode nonFatalErrorBlock]; \ if (block != nil) { \ NSDictionary *userInfo = nil; \ @@ -81,4 +83,6 @@ NSError *error = [NSError errorWithDomain:ASDisplayNodeErrorDomain code:ASDisplayNodeNonFatalErrorCode userInfo:userInfo]; \ block(error); \ } \ - } + } \ + __evaluated; \ +}) \ diff --git a/Source/Details/_ASDisplayLayer.mm b/Source/Details/_ASDisplayLayer.mm index c61861138..7611f5e31 100644 --- a/Source/Details/_ASDisplayLayer.mm +++ b/Source/Details/_ASDisplayLayer.mm @@ -100,6 +100,10 @@ - (void)setDisplaySuspended:(BOOL)displaySuspended - (void)setBounds:(CGRect)bounds { + BOOL valid = ASDisplayNodeAssertNonFatal(ASIsCGRectValidForLayout(bounds), @"Attempt to set invalid bounds %@ on %@.", NSStringFromCGRect(bounds), self); + if (!valid) { + return; + } if (_delegateFlags.delegateDidChangeBounds) { CGRect oldBounds = self.bounds; [super setBounds:bounds]; From 5998cf87b6d7d433867524af878f7515f2a1f432 Mon Sep 17 00:00:00 2001 From: Adlai Holler Date: Wed, 24 May 2017 11:18:25 -0700 Subject: [PATCH 2/2] Update message --- Source/Details/_ASDisplayLayer.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Details/_ASDisplayLayer.mm b/Source/Details/_ASDisplayLayer.mm index 7611f5e31..ea26490ec 100644 --- a/Source/Details/_ASDisplayLayer.mm +++ b/Source/Details/_ASDisplayLayer.mm @@ -100,7 +100,7 @@ - (void)setDisplaySuspended:(BOOL)displaySuspended - (void)setBounds:(CGRect)bounds { - BOOL valid = ASDisplayNodeAssertNonFatal(ASIsCGRectValidForLayout(bounds), @"Attempt to set invalid bounds %@ on %@.", NSStringFromCGRect(bounds), self); + BOOL valid = ASDisplayNodeAssertNonFatal(ASIsCGRectValidForLayout(bounds), @"Caught attempt to set invalid bounds %@ on %@.", NSStringFromCGRect(bounds), self); if (!valid) { return; }