[unicode] Fix code point serialization

This commit is contained in:
Léa Saviot
2019-01-29 10:47:29 +01:00
committed by Émilie Feral
parent 87d7d58832
commit 9dd6b41b39
2 changed files with 12 additions and 8 deletions

View File

@@ -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);

View File

@@ -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;
}