diff options
-rw-r--r-- | src/corelib/json/qjson_p.h | 2 | ||||
-rw-r--r-- | tests/auto/corelib/json/tst_qtjson.cpp | 21 |
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" |