summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/json/qjson_p.h2
-rw-r--r--tests/auto/corelib/json/tst_qtjson.cpp21
2 files changed, 22 insertions, 1 deletions
diff --git a/src/corelib/json/qjson_p.h b/src/corelib/json/qjson_p.h
index b8430cabf5..5fc021c841 100644
--- a/src/corelib/json/qjson_p.h
+++ b/src/corelib/json/qjson_p.h
@@ -629,7 +629,7 @@ public:
if (value.latinKey)
s += sizeof(ushort) + qFromLittleEndian(*(ushort *) ((const char *)this + sizeof(Entry)));
else
- s += sizeof(uint) + qFromLittleEndian(*(int *) ((const char *)this + sizeof(Entry)));
+ s += sizeof(uint) + sizeof(ushort)*qFromLittleEndian(*(int *) ((const char *)this + sizeof(Entry)));
return alignedSize(s);
}
diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp
index 18d1ecd33c..884c4b3850 100644
--- a/tests/auto/corelib/json/tst_qtjson.cpp
+++ b/tests/auto/corelib/json/tst_qtjson.cpp
@@ -145,6 +145,8 @@ private Q_SLOTS:
void unicodeKeys();
void garbageAtEnd();
+
+ void removeNonLatinKey();
private:
QString testDataDir;
};
@@ -2776,5 +2778,24 @@ void tst_QtJson::garbageAtEnd()
QVERIFY(!doc.isEmpty());
}
+void tst_QtJson::removeNonLatinKey()
+{
+ const QString nonLatinKeyName = QString::fromUtf8("Атрибут100500");
+
+ QJsonObject sourceObject;
+
+ sourceObject.insert("code", 1);
+ sourceObject.remove("code");
+
+ sourceObject.insert(nonLatinKeyName, 1);
+
+ const QByteArray json = QJsonDocument(sourceObject).toJson();
+ const QJsonObject restoredObject = QJsonDocument::fromJson(json).object();
+
+ QCOMPARE(sourceObject.keys(), restoredObject.keys());
+ QVERIFY(sourceObject.contains(nonLatinKeyName));
+ QVERIFY(restoredObject.contains(nonLatinKeyName));
+}
+
QTEST_MAIN(tst_QtJson)
#include "tst_qtjson.moc"