From 9dd6b41b397f9d3f0bda759e4ce1cd32b5ef5095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Tue, 29 Jan 2019 10:47:29 +0100 Subject: [PATCH] [unicode] Fix code point serialization --- ion/src/shared/unicode/utf8_decoder.cpp | 12 ++++++------ poincare/src/serialization_helper.cpp | 8 ++++++-- 2 files changed, 12 insertions(+), 8 deletions(-) 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; }