From 1a6b2250906254c2284907ad2da632643e98acc4 Mon Sep 17 00:00:00 2001 From: Rolf Eike Beer Date: Wed, 5 Sep 2018 13:47:08 +0200 Subject: [PATCH] avoid duplicate offset calculations when building string table Change-Id: I5bfc46b9d9cdc3bde35f60de75cb8e9e51b0b0ec Reviewed-by: Simon Hausmann --- src/qml/compiler/qv4compiler.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/qml/compiler/qv4compiler.cpp b/src/qml/compiler/qv4compiler.cpp index b6e5504c24..bbce317b8e 100644 --- a/src/qml/compiler/qv4compiler.cpp +++ b/src/qml/compiler/qv4compiler.cpp @@ -92,7 +92,7 @@ void QV4::Compiler::StringTableGenerator::serialize(CompiledData::Unit *unit) { char *dataStart = reinterpret_cast(unit); quint32_le *stringTable = reinterpret_cast(dataStart + unit->offsetToStringTable); - char *stringData = dataStart + unit->offsetToStringTable + unit->stringTableSize * sizeof(uint); + char *stringData = reinterpret_cast(stringTable) + unit->stringTableSize * sizeof(uint); for (int i = backingUnitTableSize ; i < strings.size(); ++i) { const int index = i - backingUnitTableSize; stringTable[index] = stringData - dataStart; @@ -105,10 +105,10 @@ void QV4::Compiler::StringTableGenerator::serialize(CompiledData::Unit *unit) s->offsetOn32Bit = sizeof(QV4::CompiledData::String); s->offsetOn64Bit = sizeof(QV4::CompiledData::String); #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN - memcpy(s + 1, qstr.constData(), qstr.length()*sizeof(ushort)); + memcpy(s + 1, qstr.constData(), s->size * sizeof(ushort)); #else ushort *uc = reinterpret_cast(s + 1); - for (int i = 0; i < qstr.length(); ++i) + for (int i = 0; i < s->size; ++i) uc[i] = qToLittleEndian(qstr.at(i).unicode()); #endif reinterpret_cast(s + 1)[s->size] = 0;