diff --git a/apps/shared/expression_model.cpp b/apps/shared/expression_model.cpp index 73ba0a61e..c67d399b7 100644 --- a/apps/shared/expression_model.cpp +++ b/apps/shared/expression_model.cpp @@ -33,7 +33,11 @@ void ExpressionModel::text(const Storage::Record * record, char * buffer, size_t if (symbol != 0) { e = e.replaceSymbolWithExpression(Symbol::Builder(UCodePointUnknown), Symbol::Builder(symbol)); } - e.serialize(buffer, bufferSize); + int serializedSize = e.serialize(buffer, bufferSize); + if (serializedSize >= bufferSize - 1) { + // It is very likely that the buffer is overflowed + buffer[0] = 0; + } } bool ExpressionModel::isCircularlyDefined(const Storage::Record * record, Poincare::Context * context) const { diff --git a/escher/src/text_field.cpp b/escher/src/text_field.cpp index de6e293e2..afa95ce45 100644 --- a/escher/src/text_field.cpp +++ b/escher/src/text_field.cpp @@ -78,6 +78,12 @@ void TextField::ContentView::setText(const char * text) { maxBufferSize = m_draftTextBufferSize; buffer = s_draftTextBuffer; } + if (textRealLength > maxBufferSize - 1) { + // The text was too long to be copied + // TODO Maybe add a warning for the user? + buffer[0] = 0; + return; + } int textLength = minInt(textRealLength, maxBufferSize - 1); // Copy the text strlcpy(buffer, text, maxBufferSize);