Make sure no overflow can happen
- During UTF32 LE with BOM make sure that the byteswap operation will have enough space when iterating through the text buffer, which shall get encoded. - closes https://github.com/assimp/assimp/issues/4230pull/4282/head
parent
80b0b897ed
commit
2eb86d75b8
|
@ -65,6 +65,7 @@ using namespace Assimp;
|
||||||
// Constructor to be privately used by Importer
|
// Constructor to be privately used by Importer
|
||||||
BaseImporter::BaseImporter() AI_NO_EXCEPT
|
BaseImporter::BaseImporter() AI_NO_EXCEPT
|
||||||
: m_progress() {
|
: m_progress() {
|
||||||
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -371,11 +372,16 @@ void BaseImporter::ConvertToUTF8(std::vector<char> &data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// UTF 16 BE with BOM
|
// UTF 16 BE with BOM
|
||||||
|
size_t index = 0;
|
||||||
if (*((uint16_t *)&data.front()) == 0xFFFE) {
|
if (*((uint16_t *)&data.front()) == 0xFFFE) {
|
||||||
|
|
||||||
// swap the endianness ..
|
// swap the endianness ..
|
||||||
for (uint16_t *p = (uint16_t *)&data.front(), *end = (uint16_t *)&data.back(); p <= end; ++p) {
|
for (uint16_t *p = (uint16_t *)&data.front(), *end = (uint16_t *)&data.back(); p <= end; ++p) {
|
||||||
ByteSwap::Swap2(p);
|
// Check to ensure no overflow can happen
|
||||||
|
if ((index+2) < data.Size()) {
|
||||||
|
// Swap the data
|
||||||
|
ByteSwap::Swap2(p);
|
||||||
|
index += 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue