From 5b82b94c207267a8b8e67bfc3d58340cf39c3c64 Mon Sep 17 00:00:00 2001 From: Hugo Saint-Vignes Date: Mon, 10 Aug 2020 11:55:26 +0200 Subject: [PATCH] [poincare] Prevent forbidden ChildAtIndex call in fraction_layout Change-Id: I00d282a6dd3618f669aaeb0202d6495ae8035f12 --- poincare/src/fraction_layout.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/poincare/src/fraction_layout.cpp b/poincare/src/fraction_layout.cpp index ac035cf1b..2ecc79453 100644 --- a/poincare/src/fraction_layout.cpp +++ b/poincare/src/fraction_layout.cpp @@ -175,8 +175,10 @@ bool FractionLayoutNode::isCollapsable(int * numberOfOpenParenthesis, bool going int indexOfAbsorbingSibling = indexInParent + (goingLeft ? 1 : -1); assert(indexOfAbsorbingSibling >= 0 && indexOfAbsorbingSibling < p.numberOfChildren()); Layout absorbingSibling = p.childAtIndex(indexOfAbsorbingSibling); - Layout absorbingChild = absorbingSibling.childAtIndex((goingLeft) ? absorbingSibling.leftCollapsingAbsorbingChildIndex() : absorbingSibling.rightCollapsingAbsorbingChildIndex()); - return absorbingChild.type() == LayoutNode::Type::HorizontalLayout && absorbingChild.isEmpty(); + if (absorbingSibling.numberOfChildren() > 0) { + absorbingSibling = absorbingSibling.childAtIndex((goingLeft) ? absorbingSibling.leftCollapsingAbsorbingChildIndex() : absorbingSibling.rightCollapsingAbsorbingChildIndex()); + } + return absorbingSibling.type() == LayoutNode::Type::HorizontalLayout && absorbingSibling.isEmpty(); } void FractionLayoutNode::didCollapseSiblings(LayoutCursor * cursor) {