Prevent crash when accessing child count, but child list is NULL.

Summary: Previously, we would preallocate Node's with a child list of 4. We recently removed that logic (see diff below), and as a result, if you tried to access a Node's list of children before it had been allocated, you would crash. I added a simple check to protect from crashes, the operation of the check is O(1) so we shouldn't see a perf hit.

Reviewed By: emilsjolander

Differential Revision: D4104093

fbshipit-source-id: cd7b09818759aa76415b97e241f1a6746a2bc50c
This commit is contained in:
Dustin Shahidehpour
2016-10-31 12:41:09 -07:00
committed by Facebook Github Bot
parent a65e6930cf
commit ced779b259
2 changed files with 8 additions and 1 deletions

View File

@@ -92,5 +92,9 @@ CSSNodeRef CSSNodeListDelete(const CSSNodeListRef list, const CSSNodeRef node) {
} }
CSSNodeRef CSSNodeListGet(const CSSNodeListRef list, const uint32_t index) { CSSNodeRef CSSNodeListGet(const CSSNodeListRef list, const uint32_t index) {
if (CSSNodeListCount(list) > 0) {
return list->items[index]; return list->items[index];
} }
return NULL;
}

View File

@@ -13,6 +13,9 @@
TEST(CSSLayoutTest, assert_default_values) { TEST(CSSLayoutTest, assert_default_values) {
const CSSNodeRef root = CSSNodeNew(); const CSSNodeRef root = CSSNodeNew();
ASSERT_EQ(0, CSSNodeChildCount(root));
ASSERT_EQ(NULL, CSSNodeGetChild(root, 1));
ASSERT_EQ(CSSDirectionInherit, CSSNodeStyleGetDirection(root)); ASSERT_EQ(CSSDirectionInherit, CSSNodeStyleGetDirection(root));
ASSERT_EQ(CSSFlexDirectionColumn, CSSNodeStyleGetFlexDirection(root)); ASSERT_EQ(CSSFlexDirectionColumn, CSSNodeStyleGetFlexDirection(root));
ASSERT_EQ(CSSJustifyFlexStart, CSSNodeStyleGetJustifyContent(root)); ASSERT_EQ(CSSJustifyFlexStart, CSSNodeStyleGetJustifyContent(root));