From dd00d89b642c193fac89e55e8b9d5df98733207b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 7 Jun 2017 10:24:49 +0200 Subject: [PATCH] [poincare] Resolve bug in complex write to text Change-Id: Ie5bc2cf4def9b8d9b9712e4ad6a5b3deee2d5abd --- poincare/src/complex.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/poincare/src/complex.cpp b/poincare/src/complex.cpp index 881a6fb54..cdc5ab5c5 100644 --- a/poincare/src/complex.cpp +++ b/poincare/src/complex.cpp @@ -179,16 +179,19 @@ Complex::Complex(float a, float b) : int Complex::convertComplexToText(char * buffer, int bufferSize, FloatDisplayMode displayMode, ComplexFormat complexFormat) const { assert(displayMode != FloatDisplayMode::Default); int numberOfChars = 0; + if (isnan(m_a) || isnan(m_b)) { + return convertFloatToText(NAN, buffer, bufferSize, k_numberOfSignificantDigits, displayMode); + } if (complexFormat == ComplexFormat::Polar) { if (r() != 1.0f || th() == 0.0f) { numberOfChars = convertFloatToText(r(), buffer, bufferSize, k_numberOfSignificantDigits, displayMode); - if (r() != 0.0f && th() != 0.0f && !isnan(th()) && bufferSize > numberOfChars+1) { + if (r() != 0.0f && th() != 0.0f && bufferSize > numberOfChars+1) { buffer[numberOfChars++] = '*'; // Ensure that the string is null terminated even if buffer size is to small buffer[numberOfChars] = 0; } } - if (r() != 0.0f && th() != 0.0f && !isnan(th())) { + if (r() != 0.0f && th() != 0.0f) { if (bufferSize > numberOfChars+3) { buffer[numberOfChars++] = Ion::Charset::Exponential; buffer[numberOfChars++] = '^'; @@ -215,14 +218,14 @@ int Complex::convertComplexToText(char * buffer, int bufferSize, FloatDisplayMod buffer[numberOfChars] = 0; } } - if (m_b != 1.0f && m_b != -1.0f && m_b != 0.0f && !isnan(m_b)) { + if (m_b != 1.0f && m_b != -1.0f && m_b != 0.0f) { numberOfChars += convertFloatToText(m_b, buffer+numberOfChars, bufferSize-numberOfChars, k_numberOfSignificantDigits, displayMode); buffer[numberOfChars++] = '*'; } if (m_b == -1.0f && bufferSize > numberOfChars+1) { buffer[numberOfChars++] = '-'; } - if (m_b != 0.0f && !isnan(m_b) && bufferSize > numberOfChars+1) { + if (m_b != 0.0f && bufferSize > numberOfChars+1) { buffer[numberOfChars++] = Ion::Charset::IComplex; buffer[numberOfChars] = 0; }