From d5bda1e25ea8866851cec109ff630cad44804e53 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Thu, 14 Jul 2016 15:43:16 +0200 Subject: More endianness fixes It's necessary to consistently use LEUInt32 when writing the offset tables, as that's also what we're using when reading from them. Change-Id: Idbef310bd6b28a0e6b6b0dff516e0ef178f04999 Reviewed-by: Lars Knoll --- src/qml/compiler/qv4compiler.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/qml/compiler/qv4compiler.cpp') diff --git a/src/qml/compiler/qv4compiler.cpp b/src/qml/compiler/qv4compiler.cpp index 6b9f42709f..8c99fdf0ca 100644 --- a/src/qml/compiler/qv4compiler.cpp +++ b/src/qml/compiler/qv4compiler.cpp @@ -75,13 +75,13 @@ void QV4::Compiler::StringTableGenerator::clear() void QV4::Compiler::StringTableGenerator::serialize(CompiledData::Unit *unit) { char *dataStart = reinterpret_cast(unit); - uint *stringTable = reinterpret_cast(dataStart + unit->offsetToStringTable); + CompiledData::LEUInt32 *stringTable = reinterpret_cast(dataStart + unit->offsetToStringTable); char *stringData = dataStart + unit->offsetToStringTable + unit->stringTableSize * sizeof(uint); for (int i = 0; i < strings.size(); ++i) { stringTable[i] = stringData - dataStart; const QString &qstr = strings.at(i); - QV4::CompiledData::String *s = (QV4::CompiledData::String*)(stringData); + QV4::CompiledData::String *s = reinterpret_cast(stringData); s->size = qstr.length(); #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN memcpy(s + 1, qstr.constData(), qstr.length()*sizeof(ushort)); @@ -266,9 +266,11 @@ QV4::CompiledData::Unit *QV4::Compiler::JSUnitGenerator::generateUnit(GeneratorO unit->offsetToObjects = 0; unit->indexOfRootObject = 0; - uint *functionTable = (uint *)(data + unit->offsetToFunctionTable); - for (int i = 0; i < irModule->functions.size(); ++i) - functionTable[i] = functionOffsets.value(irModule->functions.at(i)); + { + CompiledData::LEUInt32 *functionTable = reinterpret_cast(data + unit->offsetToFunctionTable); + for (int i = 0; i < irModule->functions.size(); ++i) + functionTable[i] = functionOffsets.value(irModule->functions.at(i)); + } char *f = data + unitSize; for (int i = 0; i < irModule->functions.size(); ++i) { @@ -295,7 +297,7 @@ QV4::CompiledData::Unit *QV4::Compiler::JSUnitGenerator::generateUnit(GeneratorO memcpy(jsClassDataPtrToWrite, jsClassData.constData(), jsClassData.size()); // write js classes and js class lookup table - uint *jsClassOffsetTable = (uint*)(data + unit->offsetToJSClassTable); + CompiledData::LEUInt32 *jsClassOffsetTable = reinterpret_cast(data + unit->offsetToJSClassTable); for (int i = 0; i < jsClassOffsets.count(); ++i) jsClassOffsetTable[i] = jsClassDataPtrToWrite - data + jsClassOffsets.at(i); } -- cgit v1.2.3