From fff514d41043dd9e6d558b7566219e0939cc8553 Mon Sep 17 00:00:00 2001 From: Gabriel Ozouf Date: Mon, 28 Dec 2020 14:22:05 +0100 Subject: [PATCH] [poincare/unit] Fix temperature conversion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The program would crash when trying to evaluate a unit conversion of the form "x→_U" where U was a unit of temperature and x did not have any unit. --- poincare/src/unit.cpp | 2 +- poincare/test/simplification.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/poincare/src/unit.cpp b/poincare/src/unit.cpp index 48bbcd186..35bc19e70 100644 --- a/poincare/src/unit.cpp +++ b/poincare/src/unit.cpp @@ -834,7 +834,7 @@ Expression Unit::ConvertTemperatureUnits(Expression e, Unit unit, ExpressionNode Expression startUnit; e = e.removeUnit(&startUnit); - if (startUnit.type() != ExpressionNode::Type::Unit) { + if (startUnit.isUninitialized() || startUnit.type() != ExpressionNode::Type::Unit) { return Undefined::Builder(); } const Representative * startRepr = static_cast(startUnit).representative(); diff --git a/poincare/test/simplification.cpp b/poincare/test/simplification.cpp index e0ce6ebbe..173f01643 100644 --- a/poincare/test/simplification.cpp +++ b/poincare/test/simplification.cpp @@ -1267,6 +1267,7 @@ QUIZ_CASE(poincare_simplification_unit_convert) { assert_parsed_expression_simplify_to("1→3_m", Undefined::Name()); assert_parsed_expression_simplify_to("4→_km/_m", Undefined::Name()); assert_parsed_expression_simplify_to("3×_min→_s+1-1", Undefined::Name()); + assert_parsed_expression_simplify_to("0→_K", Undefined::Name()); assert_parsed_expression_simplify_to("0_K→_°C", "-273.15×_°C"); assert_parsed_expression_simplify_to("0_°C→_K", "273.15×_K");