diff --git a/ion/src/shared/unicode/utf8_decoder.cpp b/ion/src/shared/unicode/utf8_decoder.cpp index a91895417..c95279bb1 100644 --- a/ion/src/shared/unicode/utf8_decoder.cpp +++ b/ion/src/shared/unicode/utf8_decoder.cpp @@ -79,22 +79,22 @@ size_t UTF8Decoder::CodePointToChars(CodePoint c, char * buffer, size_t bufferSi buffer[i++] = c; } else if (charCount == 2) { buffer[i++] = 0b11000000 | (c >> 6); - if (bufferSize <= i) { return i; } + if (bufferSize <= i) { return bufferSize; } buffer[i++] = 0b10000000 | (c & 0b111111); } else if (charCount == 3) { buffer[i++] = 0b11100000 | (c >> 12); - if (bufferSize <= i) { return i; } + if (bufferSize <= i) { return bufferSize; } buffer[i++] = 0b10000000 | ((c >> 6) & 0b111111); - if (bufferSize <= i) { return i; } + if (bufferSize <= i) { return bufferSize; } buffer[i++] = 0b10000000 | (c & 0b111111); } else { assert(charCount == 4); buffer[i++] = 0b11110000 | (c >> 18); - if (bufferSize <= i) { return i; } + if (bufferSize <= i) { return bufferSize; } buffer[i++] = 0b10000000 | ((c >> 12) & 0b111111); - if (bufferSize <= i) { return i; } + if (bufferSize <= i) { return bufferSize; } buffer[i++] = 0b10000000 | ((c >> 6) & 0b111111); - if (bufferSize <= i) { return i; } + if (bufferSize <= i) { return bufferSize; } buffer[i++] = 0b10000000 | (c & 0b111111); } assert(i == charCount); diff --git a/poincare/src/serialization_helper.cpp b/poincare/src/serialization_helper.cpp index 770acec6b..7c9ec1fb9 100644 --- a/poincare/src/serialization_helper.cpp +++ b/poincare/src/serialization_helper.cpp @@ -184,8 +184,12 @@ int SerializationHelper::CodePoint(char * buffer, int bufferSize, class CodePoin } } size_t size = UTF8Decoder::CodePointToChars(c, buffer, bufferSize); - assert(size <= bufferSize - 1); - buffer[size] = 0; + if (size <= bufferSize - 1) { + buffer[size] = 0; + } else { + assert(size -1 == bufferSize - 1); + buffer[--size] = 0; + } return size; }