[apps/calc] Handle alloc failure when computing calculation height

This commit is contained in:
Léa Saviot
2018-07-30 14:47:41 +02:00
parent 8e2abb8751
commit 2d4e36b98c
2 changed files with 7 additions and 0 deletions

View File

@@ -70,6 +70,12 @@ void Calculation::setContent(const char * c, Context * context, Expression * ans
KDCoordinate Calculation::height(Context * context) {
if (m_height < 0) {
LayoutRef inputLayout = createInputLayout();
if (inputLayout.isAllocationFailure()) {
/* If there is not enough tree pool space to create the layout, return a
* default height. Do not store it in m_height in case some memory get
* freed afterwards. */
return k_heightComputationFailureHeight;
}
KDCoordinate inputHeight = inputLayout.layoutSize().height();
LayoutRef approximateLayout = createApproximateOutputLayout(context);
KDCoordinate approximateOutputHeight = approximateLayout.layoutSize().height();

View File

@@ -40,6 +40,7 @@ public:
EqualSign exactAndApproximateDisplayedOutputsAreEqual(Poincare::Context * context);
constexpr static int k_printedExpressionSize = 2*::TextField::maxBufferSize();
private:
static constexpr KDCoordinate k_heightComputationFailureHeight = 50;
/* Buffers holding text expressions have to be longer than the text written
* by user (of maximum length TextField::maxBufferSize()) because when we
* print an expression we add omitted signs (multiplications, parenthesis...) */