diff options
Diffstat (limited to 'src/3rdparty/tinycbor')
-rw-r--r-- | src/3rdparty/tinycbor/0001-tst_Encoder-port-away-from-Q_FOREACH.patch | 79 | ||||
-rw-r--r-- | src/3rdparty/tinycbor/qt_attribution.json | 5 | ||||
-rw-r--r-- | src/3rdparty/tinycbor/src/cborparser.c | 2 | ||||
-rw-r--r-- | src/3rdparty/tinycbor/tests/encoder/data.cpp | 61 | ||||
-rw-r--r-- | src/3rdparty/tinycbor/tests/encoder/tst_encoder.cpp | 15 | ||||
-rw-r--r-- | src/3rdparty/tinycbor/tests/parser/data.cpp | 3 |
6 files changed, 132 insertions, 33 deletions
diff --git a/src/3rdparty/tinycbor/0001-tst_Encoder-port-away-from-Q_FOREACH.patch b/src/3rdparty/tinycbor/0001-tst_Encoder-port-away-from-Q_FOREACH.patch new file mode 100644 index 0000000000..43c8b1a452 --- /dev/null +++ b/src/3rdparty/tinycbor/0001-tst_Encoder-port-away-from-Q_FOREACH.patch @@ -0,0 +1,79 @@ +From b6e2caf7452bf2b695583196fd7b346c1663d798 Mon Sep 17 00:00:00 2001 +From: Marc Mutz <marc.mutz@qt.io> +Date: Mon, 7 Aug 2023 16:24:13 +0200 +Subject: [PATCH] tst_Encoder: port away from Q_FOREACH + +Qt is defaulting to QT_NO_FOREACH these days, so make sure we +integrate nicely with downstream and fix the single Q_FOREACH/foreach +user, in tst_encoder.cpp. + +Unfortunately, the container's initialization code doesn't exactly +lend itself to making the container const (not even IILE +(Immediately-Invoked Lambda Expression) would help here, due to the +interdependency with `len`), so the idiomatic solution would be to use +std::as_const()/qAsConst(). + +The former is available from C++17, which we don't require, yet, and +the latter is not available under QT_NO_AS_CONST (the default for Qt +these days), so grab the nettle and implement a t17::as_const() that +switches between a manual implementation of std::as_const and the real +thing, depending on __cpp_lib_as_const. The `t17` here mimicks the qNN +(q20::remove_cvref_t/q23::forward_like/etc) mechanism used in Qt +itself for backports, with s/q/t/ because ... _T_inyCbor. + +The t17 implementation is local to tst_encoder.cpp, but can easily be +extracted into a separate header once more users emerge. +--- + tests/encoder/encoder.pro | 2 ++ + tests/encoder/tst_encoder.cpp | 15 ++++++++++++++- + 2 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/tests/encoder/encoder.pro b/tests/encoder/encoder.pro +index 62d9b7e..180f0d7 100644 +--- a/tests/encoder/encoder.pro ++++ b/tests/encoder/encoder.pro +@@ -3,6 +3,8 @@ SOURCES += tst_encoder.cpp + CONFIG += testcase parallel_test c++11 + QT = core testlib + ++DEFINES += QT_NO_FOREACH QT_NO_AS_CONST ++ + INCLUDEPATH += ../../src + msvc: POST_TARGETDEPS = ../../lib/tinycbor.lib + else: POST_TARGETDEPS += ../../lib/libtinycbor.a +diff --git a/tests/encoder/tst_encoder.cpp b/tests/encoder/tst_encoder.cpp +index 31c2915..61ce9c9 100644 +--- a/tests/encoder/tst_encoder.cpp ++++ b/tests/encoder/tst_encoder.cpp +@@ -29,6 +29,19 @@ + #include <qfloat16.h> + #endif + ++#include <utility> ++namespace t17 { ++#ifdef __cpp_lib_as_const ++ using std::as_const; ++#else ++ template <typename T> ++ constexpr typename std::add_const<T>::type &as_const(T &t) noexcept { return t; } ++ // prevent rvalue arguments: ++ template <typename T> ++ void as_const(const T &&) = delete; ++#endif // __cpp_lib_as_const ++} // namespace t17 ++ + Q_DECLARE_METATYPE(CborError) + namespace QTest { + template<> char *toString<CborError>(const CborError &err) +@@ -153,7 +166,7 @@ CborError encodeVariant(CborEncoder *encoder, const QVariant &v) + CborError err = cbor_encoder_create_array(encoder, &sub, len); + if (err && !isOomError(err)) + return err; +- foreach (const QVariant &v2, list) { ++ for (const QVariant &v2 : t17::as_const(list)) { + err = static_cast<CborError>(err | encodeVariant(&sub, v2)); + if (err && !isOomError(err)) + return err; +-- +2.25.1 + diff --git a/src/3rdparty/tinycbor/qt_attribution.json b/src/3rdparty/tinycbor/qt_attribution.json index 3eccd21edb..b19c57904b 100644 --- a/src/3rdparty/tinycbor/qt_attribution.json +++ b/src/3rdparty/tinycbor/qt_attribution.json @@ -3,13 +3,14 @@ "Name": "TinyCBOR", "QDocModule": "qtcore", "QtUsage": "Used for QCborStreamReader and QCborStreamWriter.", + "SecurityCritical": true, "Description": "Concise Binary Object Representation (CBOR) Library", "Homepage": "https://github.com/intel/tinycbor", "License": "MIT License", "LicenseId": "MIT", "LicenseFile": "LICENSE", - "DownloadLocation": "https://github.com/intel/tinycbor/archive/refs/tags/v0.6-rc1.tar.gz", - "Version": "0.6-rc1", + "DownloadLocation": "https://github.com/intel/tinycbor/archive/v0.6.0/tinycbor-0.6.0.tar.gz", + "Version": "0.6.0", "Copyright": "Copyright (C) 2015-2021 Intel Corporation" } diff --git a/src/3rdparty/tinycbor/src/cborparser.c b/src/3rdparty/tinycbor/src/cborparser.c index 74d91a30e0..80c44c7e13 100644 --- a/src/3rdparty/tinycbor/src/cborparser.c +++ b/src/3rdparty/tinycbor/src/cborparser.c @@ -232,7 +232,7 @@ static CborError preparse_value(CborValue *it) case SinglePrecisionFloat: case DoublePrecisionFloat: it->flags |= CborIteratorFlag_IntegerValueTooLarge; - /* fall through */ + Q_FALLTHROUGH(); case TrueValue: case NullValue: case UndefinedValue: diff --git a/src/3rdparty/tinycbor/tests/encoder/data.cpp b/src/3rdparty/tinycbor/tests/encoder/data.cpp index 6dca49d41c..dc7c6a91a1 100644 --- a/src/3rdparty/tinycbor/tests/encoder/data.cpp +++ b/src/3rdparty/tinycbor/tests/encoder/data.cpp @@ -24,7 +24,29 @@ #include <QtTest> -static float myNaNf() +struct NegativeInteger { quint64 abs; }; +Q_DECLARE_METATYPE(NegativeInteger) + +struct SimpleType { uint8_t type; }; +Q_DECLARE_METATYPE(SimpleType) + +struct Float16Standin { uint16_t val; }; +Q_DECLARE_METATYPE(Float16Standin) + +struct Tag { CborTag tag; QVariant tagged; }; +Q_DECLARE_METATYPE(Tag) + +typedef QVector<QPair<QVariant, QVariant>> Map; +Q_DECLARE_METATYPE(Map) + +struct IndeterminateLengthArray : QVariantList { using QVariantList::QVariantList; }; +struct IndeterminateLengthMap : Map { using Map::Map; }; +Q_DECLARE_METATYPE(IndeterminateLengthArray) +Q_DECLARE_METATYPE(IndeterminateLengthMap) + +namespace { + +float myNaNf() { uint32_t v = 0x7fc00000; float f; @@ -33,7 +55,7 @@ static float myNaNf() return f; } -static float myInff() +float myInff() { uint32_t v = 0x7f800000; float f; @@ -42,7 +64,7 @@ static float myInff() return f; } -static float myNInff() +float myNInff() { uint32_t v = 0xff800000; float f; @@ -51,7 +73,7 @@ static float myNInff() return f; } -static double myNaN() +double myNaN() { uint64_t v = UINT64_C(0x7ff8000000000000); double f; @@ -60,7 +82,7 @@ static double myNaN() return f; } -static double myInf() +double myInf() { uint64_t v = UINT64_C(0x7ff0000000000000); double f; @@ -69,7 +91,7 @@ static double myInf() return f; } -static double myNInf() +double myNInf() { uint64_t v = UINT64_C(0xfff0000000000000); double f; @@ -83,36 +105,17 @@ template <size_t N> QByteArray raw(const char (&data)[N]) return QByteArray::fromRawData(data, N - 1); } -struct NegativeInteger { quint64 abs; }; -Q_DECLARE_METATYPE(NegativeInteger) - -struct SimpleType { uint8_t type; }; -Q_DECLARE_METATYPE(SimpleType) - -struct Float16Standin { uint16_t val; }; -Q_DECLARE_METATYPE(Float16Standin) - -struct Tag { CborTag tag; QVariant tagged; }; -Q_DECLARE_METATYPE(Tag) - template <typename... Args> QVariant make_list(const Args &... args) { return QVariantList{args...}; } -typedef QVector<QPair<QVariant, QVariant>> Map; -Q_DECLARE_METATYPE(Map) QVariant make_map(const std::initializer_list<QPair<QVariant, QVariant>> &list) { return QVariant::fromValue(Map(list)); } -struct IndeterminateLengthArray : QVariantList { using QVariantList::QVariantList; }; -struct IndeterminateLengthMap : Map { using Map::Map; }; -Q_DECLARE_METATYPE(IndeterminateLengthArray) -Q_DECLARE_METATYPE(IndeterminateLengthMap) - QVariant make_ilarray(const std::initializer_list<QVariant> &list) { return QVariant::fromValue(IndeterminateLengthArray(list)); @@ -239,9 +242,9 @@ void addFixedData() QTest::newRow("0.f16") << raw("\xf9\0\0") << QVariant::fromValue(qfloat16(0)); QTest::newRow("-1.f16") << raw("\xf9\xbc\0") << QVariant::fromValue(qfloat16(-1)); QTest::newRow("1.5f16") << raw("\xf9\x3e\0") << QVariant::fromValue(qfloat16(1.5)); - QTest::newRow("nan_f16") << raw("\xf9\x7e\0") << QVariant::fromValue<qfloat16>(myNaNf()); - QTest::newRow("-inf_f16") << raw("\xf9\xfc\0") << QVariant::fromValue<qfloat16>(myNInff()); - QTest::newRow("+inf_f16") << raw("\xf9\x7c\0") << QVariant::fromValue<qfloat16>(myInff()); + QTest::newRow("nan_f16") << raw("\xf9\x7e\0") << QVariant::fromValue<qfloat16>(qfloat16(myNaNf())); + QTest::newRow("-inf_f16") << raw("\xf9\xfc\0") << QVariant::fromValue<qfloat16>(qfloat16(myNInff())); + QTest::newRow("+inf_f16") << raw("\xf9\x7c\0") << QVariant::fromValue<qfloat16>(qfloat16(myInff())); #endif QTest::newRow("0.f") << raw("\xfa\0\0\0\0") << QVariant::fromValue(0.f); @@ -343,4 +346,4 @@ void addArraysAndMaps() QTest::newRow("array-1(map)") << raw("\x81\xc1\xa0") << make_list(QVariant::fromValue(Tag{1, make_map({})})); QTest::newRow("map-1(2):3(4)") << raw("\xa1\xc1\2\xc3\4") << make_map({{QVariant::fromValue(Tag{1, 2}), QVariant::fromValue(Tag{3, 4})}}); } - +} // namespace diff --git a/src/3rdparty/tinycbor/tests/encoder/tst_encoder.cpp b/src/3rdparty/tinycbor/tests/encoder/tst_encoder.cpp index 31c29152f9..61ce9c995c 100644 --- a/src/3rdparty/tinycbor/tests/encoder/tst_encoder.cpp +++ b/src/3rdparty/tinycbor/tests/encoder/tst_encoder.cpp @@ -29,6 +29,19 @@ #include <qfloat16.h> #endif +#include <utility> +namespace t17 { +#ifdef __cpp_lib_as_const + using std::as_const; +#else + template <typename T> + constexpr typename std::add_const<T>::type &as_const(T &t) noexcept { return t; } + // prevent rvalue arguments: + template <typename T> + void as_const(const T &&) = delete; +#endif // __cpp_lib_as_const +} // namespace t17 + Q_DECLARE_METATYPE(CborError) namespace QTest { template<> char *toString<CborError>(const CborError &err) @@ -153,7 +166,7 @@ CborError encodeVariant(CborEncoder *encoder, const QVariant &v) CborError err = cbor_encoder_create_array(encoder, &sub, len); if (err && !isOomError(err)) return err; - foreach (const QVariant &v2, list) { + for (const QVariant &v2 : t17::as_const(list)) { err = static_cast<CborError>(err | encodeVariant(&sub, v2)); if (err && !isOomError(err)) return err; diff --git a/src/3rdparty/tinycbor/tests/parser/data.cpp b/src/3rdparty/tinycbor/tests/parser/data.cpp index f701a5a5b0..c99160ad31 100644 --- a/src/3rdparty/tinycbor/tests/parser/data.cpp +++ b/src/3rdparty/tinycbor/tests/parser/data.cpp @@ -28,6 +28,8 @@ Q_DECLARE_METATYPE(CborError) +namespace { + template <size_t N> QByteArray raw(const char (&data)[N]) { return QByteArray::fromRawData(data, N - 1); @@ -605,3 +607,4 @@ void addValidationData(size_t minInvalid = ~size_t(0)) // This test technically tests the dumper, not the parser. QTest::newRow("string-utf8-chunk-split") << raw("\x81\x7f\x61\xc2\x61\xa0\xff") << 0 << CborErrorInvalidUtf8TextString; } +} // namespace |