diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2022-06-08 09:33:23 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2022-06-21 22:25:32 -0700 |
commit | e114fec62adf13b8c21ca890fb748cb27f391c25 (patch) | |
tree | 5f3aef5bb175a3127597e356cf0eccf4f79342e8 /src | |
parent | 492b338f570afce3fbadb518bb0b9ab7fdf67e03 (diff) |
QJsonValue: fix incorrect to{Array,Object} when the value is empty
This is a repeat of commit de6ced66920600e659dbaa2509526a3bcb0b3360
"QCborValue: fix incorrect to{Array,Map} when the value is empty" (6.4),
which fixed the same thing for QCborValue. I've just copied the exact
same implementation onto the QJsonValue functions.
Pick-to: 6.2 6.3 6.4 5.15
Fixes: QTBUG-104085
Change-Id: I175efddd75f24ae59057fffd16f6b257bf7ed36d
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/serialization/qjsonarray.cpp | 1 | ||||
-rw-r--r-- | src/corelib/serialization/qjsonobject.cpp | 1 | ||||
-rw-r--r-- | src/corelib/serialization/qjsonvalue.cpp | 22 |
3 files changed, 14 insertions, 10 deletions
diff --git a/src/corelib/serialization/qjsonarray.cpp b/src/corelib/serialization/qjsonarray.cpp index 94277db922..167b6a3a77 100644 --- a/src/corelib/serialization/qjsonarray.cpp +++ b/src/corelib/serialization/qjsonarray.cpp @@ -119,7 +119,6 @@ QJsonArray::QJsonArray() = default; QJsonArray::QJsonArray(QCborContainerPrivate *array) : a(array) { - Q_ASSERT(array); } /*! diff --git a/src/corelib/serialization/qjsonobject.cpp b/src/corelib/serialization/qjsonobject.cpp index ad217b419e..a3e5bd695e 100644 --- a/src/corelib/serialization/qjsonobject.cpp +++ b/src/corelib/serialization/qjsonobject.cpp @@ -103,7 +103,6 @@ QJsonObject::QJsonObject() = default; QJsonObject::QJsonObject(QCborContainerPrivate *object) : o(object) { - Q_ASSERT(o); } /*! diff --git a/src/corelib/serialization/qjsonvalue.cpp b/src/corelib/serialization/qjsonvalue.cpp index be982f82db..a92677d19d 100644 --- a/src/corelib/serialization/qjsonvalue.cpp +++ b/src/corelib/serialization/qjsonvalue.cpp @@ -708,11 +708,14 @@ QString QJsonValue::toString() const */ QJsonArray QJsonValue::toArray(const QJsonArray &defaultValue) const { - const auto dd = QJsonPrivate::Value::container(value); - const auto n = QJsonPrivate::Value::valueHelper(value); - if (value.type() != QCborValue::Array || n >= 0 || !dd) + if (!isArray()) return defaultValue; - + QCborContainerPrivate *dd = nullptr; + const auto n = QJsonPrivate::Value::valueHelper(value); + const auto container = QJsonPrivate::Value::container(value); + Q_ASSERT(n == -1 || container == nullptr); + if (n < 0) + dd = container; return QJsonArray(dd); } @@ -735,11 +738,14 @@ QJsonArray QJsonValue::toArray() const */ QJsonObject QJsonValue::toObject(const QJsonObject &defaultValue) const { - const auto dd = QJsonPrivate::Value::container(value); - const auto n = QJsonPrivate::Value::valueHelper(value); - if (value.type() != QCborValue::Map || n >= 0 || !dd) + if (!isObject()) return defaultValue; - + QCborContainerPrivate *dd = nullptr; + const auto container = QJsonPrivate::Value::container(value); + const auto n = QJsonPrivate::Value::valueHelper(value); + Q_ASSERT(n == -1 || container == nullptr); + if (n < 0) + dd = container; return QJsonObject(dd); } |