| 1 | #include <QtTest> |
| 2 | #include <limits> |
| 3 | #include <cbor.h> |
| 4 | |
| 5 | Q_DECLARE_METATYPE(CborError) |
| 6 | |
| 7 | template <size_t N> QByteArray raw(const char (&data)[N]) |
| 8 | { |
| 9 | return QByteArray::fromRawData(data, size: N - 1); |
| 10 | } |
| 11 | |
| 12 | void addIntegers() |
| 13 | { |
| 14 | QTest::addColumn<QByteArray>(name: "data" ); |
| 15 | QTest::addColumn<quint64>(name: "expectedRaw" ); |
| 16 | QTest::addColumn<qint64>(name: "expectedValue" ); |
| 17 | QTest::addColumn<bool>(name: "isNegative" ); |
| 18 | QTest::addColumn<bool>(name: "inInt64Range" ); |
| 19 | |
| 20 | // unsigned integers |
| 21 | QTest::newRow(dataTag: "0" ) << raw(data: "\x00" ) << Q_UINT64_C(0) << Q_INT64_C(0) << false << true; |
| 22 | QTest::newRow(dataTag: "1" ) << raw(data: "\x01" ) << Q_UINT64_C(1) << Q_INT64_C(1) << false << true; |
| 23 | QTest::newRow(dataTag: "10" ) << raw(data: "\x0a" ) << Q_UINT64_C(10) << Q_INT64_C(10) << false << true; |
| 24 | QTest::newRow(dataTag: "23" ) << raw(data: "\x17" ) << Q_UINT64_C(23) << Q_INT64_C(23) << false << true; |
| 25 | QTest::newRow(dataTag: "24" ) << raw(data: "\x18\x18" ) << Q_UINT64_C(24) << Q_INT64_C(24) << false << true; |
| 26 | QTest::newRow(dataTag: "UINT8_MAX" ) << raw(data: "\x18\xff" ) << Q_UINT64_C(255) << Q_INT64_C(255) << false << true; |
| 27 | QTest::newRow(dataTag: "UINT8_MAX+1" ) << raw(data: "\x19\x01\x00" ) << Q_UINT64_C(256) << Q_INT64_C(256) << false << true; |
| 28 | QTest::newRow(dataTag: "UINT16_MAX" ) << raw(data: "\x19\xff\xff" ) << Q_UINT64_C(65535) << Q_INT64_C(65535) << false << true; |
| 29 | QTest::newRow(dataTag: "UINT16_MAX+1" ) << raw(data: "\x1a\0\1\x00\x00" ) << Q_UINT64_C(65536) << Q_INT64_C(65536) << false << true; |
| 30 | QTest::newRow(dataTag: "UINT32_MAX" ) << raw(data: "\x1a\xff\xff\xff\xff" ) << Q_UINT64_C(4294967295) << Q_INT64_C(4294967295) << false << true; |
| 31 | QTest::newRow(dataTag: "UINT32_MAX+1" ) << raw(data: "\x1b\0\0\0\1\0\0\0\0" ) << Q_UINT64_C(4294967296) << Q_INT64_C(4294967296) << false << true; |
| 32 | QTest::newRow(dataTag: "INT64_MAX" ) << raw(data: "\x1b" "\x7f\xff\xff\xff" "\xff\xff\xff\xff" ) |
| 33 | << quint64(std::numeric_limits<qint64>::max()) |
| 34 | << std::numeric_limits<qint64>::max() << false << true; |
| 35 | QTest::newRow(dataTag: "UINT64_MAX" ) << raw(data: "\x1b" "\xff\xff\xff\xff" "\xff\xff\xff\xff" ) |
| 36 | << std::numeric_limits<quint64>::max() << qint64(-123456) << false << false; |
| 37 | |
| 38 | // negative integers |
| 39 | QTest::newRow(dataTag: "-1" ) << raw(data: "\x20" ) << Q_UINT64_C(0) << Q_INT64_C(-1) << true << true; |
| 40 | QTest::newRow(dataTag: "-2" ) << raw(data: "\x21" ) << Q_UINT64_C(1) << Q_INT64_C(-2) << true << true; |
| 41 | QTest::newRow(dataTag: "-24" ) << raw(data: "\x37" ) << Q_UINT64_C(23) << Q_INT64_C(-24) << true << true; |
| 42 | QTest::newRow(dataTag: "-25" ) << raw(data: "\x38\x18" ) << Q_UINT64_C(24) << Q_INT64_C(-25) << true << true; |
| 43 | QTest::newRow(dataTag: "-UINT8_MAX" ) << raw(data: "\x38\xff" ) << Q_UINT64_C(255) << Q_INT64_C(-256) << true << true; |
| 44 | QTest::newRow(dataTag: "-UINT8_MAX-1" ) << raw(data: "\x39\x01\x00" ) << Q_UINT64_C(256) << Q_INT64_C(-257) << true << true; |
| 45 | QTest::newRow(dataTag: "-UINT16_MAX" ) << raw(data: "\x39\xff\xff" ) << Q_UINT64_C(65535) << Q_INT64_C(-65536) << true << true; |
| 46 | QTest::newRow(dataTag: "-UINT16_MAX-1" ) << raw(data: "\x3a\0\1\x00\x00" ) << Q_UINT64_C(65536) << Q_INT64_C(-65537) << true << true; |
| 47 | QTest::newRow(dataTag: "-UINT32_MAX" ) << raw(data: "\x3a\xff\xff\xff\xff" ) << Q_UINT64_C(4294967295) << Q_INT64_C(-4294967296) << true << true; |
| 48 | QTest::newRow(dataTag: "-UINT32_MAX-1" ) << raw(data: "\x3b\0\0\0\1\0\0\0\0" ) << Q_UINT64_C(4294967296) << Q_INT64_C(-4294967297) << true << true; |
| 49 | QTest::newRow(dataTag: "INT64_MIN+1" ) << raw(data: "\x3b\x7f\xff\xff\xff" "\xff\xff\xff\xfe" ) |
| 50 | << quint64(std::numeric_limits<qint64>::max() - 1) |
| 51 | << (std::numeric_limits<qint64>::min() + 1) |
| 52 | << true << true; |
| 53 | QTest::newRow(dataTag: "INT64_MIN" ) << raw(data: "\x3b\x7f\xff\xff\xff" "\xff\xff\xff\xff" ) |
| 54 | << quint64(std::numeric_limits<qint64>::max()) |
| 55 | << std::numeric_limits<qint64>::min() |
| 56 | << true << true; |
| 57 | QTest::newRow(dataTag: "INT64_MIN-1" ) << raw(data: "\x3b\x80\0\0\0" "\0\0\0\0" ) << Q_UINT64_C(9223372036854775808) << qint64(-123456) << true << false; |
| 58 | QTest::newRow(dataTag: "-UINT64_MAX" ) << raw(data: "\x3b" "\xff\xff\xff\xff" "\xff\xff\xff\xfe" ) |
| 59 | << (std::numeric_limits<quint64>::max() - 1) << qint64(-123456) << true << false; |
| 60 | QTest::newRow(dataTag: "-UINT64_MAX+1" ) << raw(data: "\x3b" "\xff\xff\xff\xff" "\xff\xff\xff\xff" ) |
| 61 | << std::numeric_limits<quint64>::max() << qint64(-123456) << true << false; |
| 62 | } |
| 63 | |
| 64 | void addColumns() |
| 65 | { |
| 66 | QTest::addColumn<QByteArray>(name: "data" ); |
| 67 | QTest::addColumn<QString>(name: "expected" ); |
| 68 | QTest::addColumn<int>(name: "n" ); // some aux integer, not added in all columns |
| 69 | } |
| 70 | |
| 71 | void addFixedData() |
| 72 | { |
| 73 | // unsigned integers |
| 74 | QTest::newRow(dataTag: "0" ) << raw(data: "\x00" ) << "0" ; |
| 75 | QTest::newRow(dataTag: "1" ) << raw(data: "\x01" ) << "1" ; |
| 76 | QTest::newRow(dataTag: "10" ) << raw(data: "\x0a" ) << "10" ; |
| 77 | QTest::newRow(dataTag: "23" ) << raw(data: "\x17" ) << "23" ; |
| 78 | QTest::newRow(dataTag: "24" ) << raw(data: "\x18\x18" ) << "24" ; |
| 79 | QTest::newRow(dataTag: "UINT8_MAX" ) << raw(data: "\x18\xff" ) << "255" ; |
| 80 | QTest::newRow(dataTag: "UINT8_MAX+1" ) << raw(data: "\x19\x01\x00" ) << "256" ; |
| 81 | QTest::newRow(dataTag: "UINT16_MAX" ) << raw(data: "\x19\xff\xff" ) << "65535" ; |
| 82 | QTest::newRow(dataTag: "UINT16_MAX+1" ) << raw(data: "\x1a\0\1\x00\x00" ) << "65536" ; |
| 83 | QTest::newRow(dataTag: "UINT32_MAX" ) << raw(data: "\x1a\xff\xff\xff\xff" ) << "4294967295" ; |
| 84 | QTest::newRow(dataTag: "UINT32_MAX+1" ) << raw(data: "\x1b\0\0\0\1\0\0\0\0" ) << "4294967296" ; |
| 85 | QTest::newRow(dataTag: "UINT64_MAX" ) << raw(data: "\x1b" "\xff\xff\xff\xff" "\xff\xff\xff\xff" ) |
| 86 | << QString::number(std::numeric_limits<uint64_t>::max()); |
| 87 | |
| 88 | // negative integers |
| 89 | QTest::newRow(dataTag: "-1" ) << raw(data: "\x20" ) << "-1" ; |
| 90 | QTest::newRow(dataTag: "-2" ) << raw(data: "\x21" ) << "-2" ; |
| 91 | QTest::newRow(dataTag: "-24" ) << raw(data: "\x37" ) << "-24" ; |
| 92 | QTest::newRow(dataTag: "-25" ) << raw(data: "\x38\x18" ) << "-25" ; |
| 93 | QTest::newRow(dataTag: "-UINT8_MAX" ) << raw(data: "\x38\xff" ) << "-256" ; |
| 94 | QTest::newRow(dataTag: "-UINT8_MAX-1" ) << raw(data: "\x39\x01\x00" ) << "-257" ; |
| 95 | QTest::newRow(dataTag: "-UINT16_MAX" ) << raw(data: "\x39\xff\xff" ) << "-65536" ; |
| 96 | QTest::newRow(dataTag: "-UINT16_MAX-1" ) << raw(data: "\x3a\0\1\x00\x00" ) << "-65537" ; |
| 97 | QTest::newRow(dataTag: "-UINT32_MAX" ) << raw(data: "\x3a\xff\xff\xff\xff" ) << "-4294967296" ; |
| 98 | QTest::newRow(dataTag: "-UINT32_MAX-1" ) << raw(data: "\x3b\0\0\0\1\0\0\0\0" ) << "-4294967297" ; |
| 99 | QTest::newRow(dataTag: "INT64_MIN+1" ) << raw(data: "\x3b\x7f\xff\xff\xff" "\xff\xff\xff\xfe" ) |
| 100 | << QString::number(std::numeric_limits<int64_t>::min() + 1); |
| 101 | QTest::newRow(dataTag: "INT64_MIN" ) << raw(data: "\x3b\x7f\xff\xff\xff" "\xff\xff\xff\xff" ) |
| 102 | << QString::number(std::numeric_limits<int64_t>::min()); |
| 103 | QTest::newRow(dataTag: "INT64_MIN-1" ) << raw(data: "\x3b\x80\0\0\0" "\0\0\0\0" ) << "-9223372036854775809" ; |
| 104 | QTest::newRow(dataTag: "-UINT64_MAX" ) << raw(data: "\x3b" "\xff\xff\xff\xff" "\xff\xff\xff\xfe" ) |
| 105 | << '-' + QString::number(std::numeric_limits<uint64_t>::max()); |
| 106 | QTest::newRow(dataTag: "-UINT64_MAX+1" ) << raw(data: "\x3b" "\xff\xff\xff\xff" "\xff\xff\xff\xff" ) |
| 107 | << "-18446744073709551616" ; |
| 108 | |
| 109 | // overlongs |
| 110 | QTest::newRow(dataTag: "0*1" ) << raw(data: "\x18\x00" ) << "0_0" ; |
| 111 | QTest::newRow(dataTag: "0*2" ) << raw(data: "\x19\x00\x00" ) << "0_1" ; |
| 112 | QTest::newRow(dataTag: "0*4" ) << raw(data: "\x1a\0\0\0\0" ) << "0_2" ; |
| 113 | QTest::newRow(dataTag: "0*8" ) << raw(data: "\x1b\0\0\0\0\0\0\0\0" ) << "0_3" ; |
| 114 | QTest::newRow(dataTag: "-1*1" ) << raw(data: "\x38\x00" ) << "-1_0" ; |
| 115 | QTest::newRow(dataTag: "-1*2" ) << raw(data: "\x39\x00\x00" ) << "-1_1" ; |
| 116 | QTest::newRow(dataTag: "-1*4" ) << raw(data: "\x3a\0\0\0\0" ) << "-1_2" ; |
| 117 | QTest::newRow(dataTag: "-1*8" ) << raw(data: "\x3b\0\0\0\0\0\0\0\0" ) << "-1_3" ; |
| 118 | |
| 119 | QTest::newRow(dataTag: "simple0" ) << raw(data: "\xe0" ) << "simple(0)" ; |
| 120 | QTest::newRow(dataTag: "simple19" ) << raw(data: "\xf3" ) << "simple(19)" ; |
| 121 | QTest::newRow(dataTag: "false" ) << raw(data: "\xf4" ) << "false" ; |
| 122 | QTest::newRow(dataTag: "true" ) << raw(data: "\xf5" ) << "true" ; |
| 123 | QTest::newRow(dataTag: "null" ) << raw(data: "\xf6" ) << "null" ; |
| 124 | QTest::newRow(dataTag: "undefined" ) << raw(data: "\xf7" ) << "undefined" ; |
| 125 | QTest::newRow(dataTag: "simple32" ) << raw(data: "\xf8\x20" ) << "simple(32)" ; |
| 126 | QTest::newRow(dataTag: "simple255" ) << raw(data: "\xf8\xff" ) << "simple(255)" ; |
| 127 | |
| 128 | // floating point |
| 129 | |
| 130 | QTest::newRow(dataTag: "0.f16" ) << raw(data: "\xf9\0\0" ) << "0.f16" ; |
| 131 | QTest::newRow(dataTag: "0.f" ) << raw(data: "\xfa\0\0\0\0" ) << "0.f" ; |
| 132 | QTest::newRow(dataTag: "0." ) << raw(data: "\xfb\0\0\0\0\0\0\0\0" ) << "0." ; |
| 133 | QTest::newRow(dataTag: "-1.f16" ) << raw(data: "\xf9\xbc\x00" ) << "-1.f16" ; |
| 134 | QTest::newRow(dataTag: "-1.f" ) << raw(data: "\xfa\xbf\x80\0\0" ) << "-1.f" ; |
| 135 | QTest::newRow(dataTag: "-1." ) << raw(data: "\xfb\xbf\xf0\0\0\0\0\0\0" ) << "-1." ; |
| 136 | QTest::newRow(dataTag: "65504.f16" ) << raw(data: "\xf9\x7b\xff" ) << "65504.f16" ; |
| 137 | QTest::newRow(dataTag: "16777215.f" ) << raw(data: "\xfa\x4b\x7f\xff\xff" ) << "16777215.f" ; |
| 138 | QTest::newRow(dataTag: "16777215." ) << raw(data: "\xfb\x41\x6f\xff\xff\xe0\0\0\0" ) << "16777215." ; |
| 139 | QTest::newRow(dataTag: "-16777215.f" ) << raw(data: "\xfa\xcb\x7f\xff\xff" ) << "-16777215.f" ; |
| 140 | QTest::newRow(dataTag: "-16777215." ) << raw(data: "\xfb\xc1\x6f\xff\xff\xe0\0\0\0" ) << "-16777215." ; |
| 141 | |
| 142 | QTest::newRow(dataTag: "0.5f16" ) << raw(data: "\xf9\x38\0" ) << "0.5f16" ; |
| 143 | QTest::newRow(dataTag: "0.5f" ) << raw(data: "\xfa\x3f\0\0\0" ) << "0.5f" ; |
| 144 | QTest::newRow(dataTag: "0.5" ) << raw(data: "\xfb\x3f\xe0\0\0\0\0\0\0" ) << "0.5" ; |
| 145 | QTest::newRow(dataTag: "2.f16^11-1" ) << raw(data: "\xf9\x67\xff" ) << "2047.f16" ; |
| 146 | QTest::newRow(dataTag: "2.f^24-1" ) << raw(data: "\xfa\x4b\x7f\xff\xff" ) << "16777215.f" ; |
| 147 | QTest::newRow(dataTag: "2.^53-1" ) << raw(data: "\xfb\x43\x3f\xff\xff" "\xff\xff\xff\xff" ) << "9007199254740991." ; |
| 148 | QTest::newRow(dataTag: "2.f^64-epsilon" ) << raw(data: "\xfa\x5f\x7f\xff\xff" ) << "18446742974197923840.f" ; |
| 149 | QTest::newRow(dataTag: "2.^64-epsilon" ) << raw(data: "\xfb\x43\xef\xff\xff" "\xff\xff\xff\xff" ) << "18446744073709549568." ; |
| 150 | QTest::newRow(dataTag: "2.f^64" ) << raw(data: "\xfa\x5f\x80\0\0" ) << "1.8446744073709552e+19f" ; |
| 151 | QTest::newRow(dataTag: "2.^64" ) << raw(data: "\xfb\x43\xf0\0\0\0\0\0\0" ) << "1.8446744073709552e+19" ; |
| 152 | |
| 153 | QTest::newRow(dataTag: "nan_f16" ) << raw(data: "\xf9\x7e\x00" ) << "nan" ; |
| 154 | QTest::newRow(dataTag: "nan_f" ) << raw(data: "\xfa\x7f\xc0\0\0" ) << "nan" ; |
| 155 | QTest::newRow(dataTag: "nan" ) << raw(data: "\xfb\x7f\xf8\0\0\0\0\0\0" ) << "nan" ; |
| 156 | QTest::newRow(dataTag: "-inf_f16" ) << raw(data: "\xf9\xfc\x00" ) << "-inf" ; |
| 157 | QTest::newRow(dataTag: "-inf_f" ) << raw(data: "\xfa\xff\x80\0\0" ) << "-inf" ; |
| 158 | QTest::newRow(dataTag: "-inf" ) << raw(data: "\xfb\xff\xf0\0\0\0\0\0\0" ) << "-inf" ; |
| 159 | QTest::newRow(dataTag: "+inf_f16" ) << raw(data: "\xf9\x7c\x00" ) << "inf" ; |
| 160 | QTest::newRow(dataTag: "+inf_f" ) << raw(data: "\xfa\x7f\x80\0\0" ) << "inf" ; |
| 161 | QTest::newRow(dataTag: "+inf" ) << raw(data: "\xfb\x7f\xf0\0\0\0\0\0\0" ) << "inf" ; |
| 162 | |
| 163 | } |
| 164 | |
| 165 | void addNonChunkedStringsData() |
| 166 | { |
| 167 | // byte strings |
| 168 | QTest::newRow(dataTag: "emptybytestring" ) << raw(data: "\x40" ) << "h''" ; |
| 169 | QTest::newRow(dataTag: "bytestring1" ) << raw(data: "\x41 " ) << "h'20'" ; |
| 170 | QTest::newRow(dataTag: "bytestring1-nul" ) << raw(data: "\x41\0" ) << "h'00'" ; |
| 171 | QTest::newRow(dataTag: "bytestring5" ) << raw(data: "\x45Hello" ) << "h'48656c6c6f'" ; |
| 172 | QTest::newRow(dataTag: "bytestring24" ) << raw(data: "\x58\x18" "123456789012345678901234" ) |
| 173 | << "h'313233343536373839303132333435363738393031323334'" ; |
| 174 | QTest::newRow(dataTag: "bytestring256" ) << raw(data: "\x59\1\0" ) + QByteArray(256, '3') |
| 175 | << "h'" + QString(256 * 2, '3') + '\''; |
| 176 | |
| 177 | // text strings |
| 178 | QTest::newRow(dataTag: "emptytextstring" ) << raw(data: "\x60" ) << "\"\"" ; |
| 179 | QTest::newRow(dataTag: "textstring1" ) << raw(data: "\x61 " ) << "\" \"" ; |
| 180 | QTest::newRow(dataTag: "textstring1-nul" ) << raw(data: "\x61\0" ) << "\"\\u0000\"" ; |
| 181 | QTest::newRow(dataTag: "textstring5" ) << raw(data: "\x65Hello" ) << "\"Hello\"" ; |
| 182 | QTest::newRow(dataTag: "textstring24" ) << raw(data: "\x78\x18" "123456789012345678901234" ) |
| 183 | << "\"123456789012345678901234\"" ; |
| 184 | QTest::newRow(dataTag: "textstring256" ) << raw(data: "\x79\1\0" ) + QByteArray(256, '3') |
| 185 | << '"' + QString(256, '3') + '"'; |
| 186 | |
| 187 | // some strings with UTF-8 content |
| 188 | // we had a bug in the pretty dumper - see issue #54 |
| 189 | QTest::newRow(dataTag: "textstringutf8-2char" ) << raw(data: "\x62\xc2\xa0" ) << "\"\\u00A0\"" ; |
| 190 | QTest::newRow(dataTag: "textstringutf8-2char2" ) << raw(data: "\x64\xc2\xa0\xc2\xa9" ) << "\"\\u00A0\\u00A9\"" ; |
| 191 | QTest::newRow(dataTag: "textstringutf8-3char" ) << raw(data: "\x63\xe2\x88\x80" ) << "\"\\u2200\"" ; |
| 192 | QTest::newRow(dataTag: "textstringutf8-4char" ) << raw(data: "\x64\xf0\x90\x88\x83" ) << "\"\\uD800\\uDE03\"" ; |
| 193 | |
| 194 | // strings with overlong length |
| 195 | QTest::newRow(dataTag: "emptybytestring*1" ) << raw(data: "\x58\x00" ) << "h''_0" ; |
| 196 | QTest::newRow(dataTag: "emptytextstring*1" ) << raw(data: "\x78\x00" ) << "\"\"_0" ; |
| 197 | QTest::newRow(dataTag: "emptybytestring*2" ) << raw(data: "\x59\x00\x00" ) << "h''_1" ; |
| 198 | QTest::newRow(dataTag: "emptytextstring*2" ) << raw(data: "\x79\x00\x00" ) << "\"\"_1" ; |
| 199 | QTest::newRow(dataTag: "emptybytestring*4" ) << raw(data: "\x5a\0\0\0\0" ) << "h''_2" ; |
| 200 | QTest::newRow(dataTag: "emptytextstring*4" ) << raw(data: "\x7a\0\0\0\0" ) << "\"\"_2" ; |
| 201 | QTest::newRow(dataTag: "emptybytestring*8" ) << raw(data: "\x5b\0\0\0\0\0\0\0\0" ) << "h''_3" ; |
| 202 | QTest::newRow(dataTag: "emptytextstring*8" ) << raw(data: "\x7b\0\0\0\0\0\0\0\0" ) << "\"\"_3" ; |
| 203 | QTest::newRow(dataTag: "bytestring5*1" ) << raw(data: "\x58\x05Hello" ) << "h'48656c6c6f'_0" ; |
| 204 | QTest::newRow(dataTag: "textstring5*1" ) << raw(data: "\x78\x05Hello" ) << "\"Hello\"_0" ; |
| 205 | QTest::newRow(dataTag: "bytestring5*2" ) << raw(data: "\x59\0\5Hello" ) << "h'48656c6c6f'_1" ; |
| 206 | QTest::newRow(dataTag: "textstring5*2" ) << raw(data: "\x79\0\x05Hello" ) << "\"Hello\"_1" ; |
| 207 | QTest::newRow(dataTag: "bytestring5*4" ) << raw(data: "\x5a\0\0\0\5Hello" ) << "h'48656c6c6f'_2" ; |
| 208 | QTest::newRow(dataTag: "textstring5*4" ) << raw(data: "\x7a\0\0\0\x05Hello" ) << "\"Hello\"_2" ; |
| 209 | QTest::newRow(dataTag: "bytestring5*8" ) << raw(data: "\x5b\0\0\0\0\0\0\0\5Hello" ) << "h'48656c6c6f'_3" ; |
| 210 | QTest::newRow(dataTag: "textstring5*8" ) << raw(data: "\x7b\0\0\0\0\0\0\0\x05Hello" ) << "\"Hello\"_3" ; |
| 211 | |
| 212 | } |
| 213 | |
| 214 | void addStringsData() |
| 215 | { |
| 216 | addNonChunkedStringsData(); |
| 217 | |
| 218 | // strings with undefined length |
| 219 | QTest::newRow(dataTag: "_emptybytestring" ) << raw(data: "\x5f\xff" ) << "(_ )" ; |
| 220 | QTest::newRow(dataTag: "_emptytextstring" ) << raw(data: "\x7f\xff" ) << "(_ )" ; |
| 221 | QTest::newRow(dataTag: "_emptybytestring2" ) << raw(data: "\x5f\x40\xff" ) << "(_ h'')" ; |
| 222 | QTest::newRow(dataTag: "_emptytextstring2" ) << raw(data: "\x7f\x60\xff" ) << "(_ \"\")" ; |
| 223 | QTest::newRow(dataTag: "_emptybytestring2*1" ) << raw(data: "\x5f\x58\x00\xff" ) << "(_ h''_0)" ; |
| 224 | QTest::newRow(dataTag: "_emptytextstring2*1" ) << raw(data: "\x7f\x78\x00\xff" ) << "(_ \"\"_0)" ; |
| 225 | QTest::newRow(dataTag: "_emptybytestring3" ) << raw(data: "\x5f\x40\x40\xff" ) << "(_ h'', h'')" ; |
| 226 | QTest::newRow(dataTag: "_emptytextstring3" ) << raw(data: "\x7f\x60\x60\xff" ) << "(_ \"\", \"\")" ; |
| 227 | QTest::newRow(dataTag: "_emptybytestring3*2" ) << raw(data: "\x5f\x59\x00\x00\x40\xff" ) << "(_ h''_1, h'')" ; |
| 228 | QTest::newRow(dataTag: "_emptytextstring3*2" ) << raw(data: "\x7f\x79\x00\x00\x60\xff" ) << "(_ \"\"_1, \"\")" ; |
| 229 | QTest::newRow(dataTag: "_bytestring5x2" ) << raw(data: "\x5f\x43Hel\x42lo\xff" ) << "(_ h'48656c', h'6c6f')" ; |
| 230 | QTest::newRow(dataTag: "_textstring5x2" ) << raw(data: "\x7f\x63Hel\x62lo\xff" ) << "(_ \"Hel\", \"lo\")" ; |
| 231 | QTest::newRow(dataTag: "_bytestring5x2*8*4" ) << raw(data: "\x5f\x5b\0\0\0\0\0\0\0\3Hel\x5a\0\0\0\2lo\xff" ) << "(_ h'48656c'_3, h'6c6f'_2)" ; |
| 232 | QTest::newRow(dataTag: "_textstring5x2*8*4" ) << raw(data: "\x7f\x7b\0\0\0\0\0\0\0\3Hel\x7a\0\0\0\2lo\xff" ) << "(_ \"Hel\"_3, \"lo\"_2)" ; |
| 233 | QTest::newRow(dataTag: "_bytestring5x5" ) << raw(data: "\x5f\x41H\x41" "e\x41l\x41l\x41o\xff" ) << "(_ h'48', h'65', h'6c', h'6c', h'6f')" ; |
| 234 | QTest::newRow(dataTag: "_textstring5x5" ) << raw(data: "\x7f\x61H\x61" "e\x61l\x61l\x61o\xff" ) << "(_ \"H\", \"e\", \"l\", \"l\", \"o\")" ; |
| 235 | QTest::newRow(dataTag: "_bytestring5x6" ) << raw(data: "\x5f\x41H\x41" "e\x40\x41l\x41l\x41o\xff" ) << "(_ h'48', h'65', h'', h'6c', h'6c', h'6f')" ; |
| 236 | QTest::newRow(dataTag: "_textstring5x6" ) << raw(data: "\x7f\x61H\x61" "e\x61l\x60\x61l\x61o\xff" ) << "(_ \"H\", \"e\", \"l\", \"\", \"l\", \"o\")" ; |
| 237 | } |
| 238 | |
| 239 | void addTagsData() |
| 240 | { |
| 241 | // since parseOne() works recursively for tags, we can't test lone tags |
| 242 | QTest::newRow(dataTag: "tag0" ) << raw(data: "\xc0\x00" ) << "0(0)" ; |
| 243 | QTest::newRow(dataTag: "tag1" ) << raw(data: "\xc1\x00" ) << "1(0)" ; |
| 244 | QTest::newRow(dataTag: "tag24" ) << raw(data: "\xd8\x18\x00" ) << "24(0)" ; |
| 245 | QTest::newRow(dataTag: "tag255" ) << raw(data: "\xd8\xff\x00" ) << "255(0)" ; |
| 246 | QTest::newRow(dataTag: "tag256" ) << raw(data: "\xd9\1\0\x00" ) << "256(0)" ; |
| 247 | QTest::newRow(dataTag: "tag65535" ) << raw(data: "\xd9\xff\xff\x00" ) << "65535(0)" ; |
| 248 | QTest::newRow(dataTag: "tag65536" ) << raw(data: "\xda\0\1\0\0\x00" ) << "65536(0)" ; |
| 249 | QTest::newRow(dataTag: "tagUINT32_MAX-1" ) << raw(data: "\xda\xff\xff\xff\xff\x00" ) << "4294967295(0)" ; |
| 250 | QTest::newRow(dataTag: "tagUINT32_MAX" ) << raw(data: "\xdb\0\0\0\1\0\0\0\0\x00" ) << "4294967296(0)" ; |
| 251 | QTest::newRow(dataTag: "tagUINT64_MAX" ) << raw(data: "\xdb" "\xff\xff\xff\xff" "\xff\xff\xff\xff" "\x00" ) |
| 252 | << QString::number(std::numeric_limits<uint64_t>::max()) + "(0)" ; |
| 253 | |
| 254 | // overlong tags |
| 255 | QTest::newRow(dataTag: "tag0*1" ) << raw(data: "\xd8\0\x00" ) << "0_0(0)" ; |
| 256 | QTest::newRow(dataTag: "tag0*2" ) << raw(data: "\xd9\0\0\x00" ) << "0_1(0)" ; |
| 257 | QTest::newRow(dataTag: "tag0*4" ) << raw(data: "\xda\0\0\0\0\x00" ) << "0_2(0)" ; |
| 258 | QTest::newRow(dataTag: "tag0*8" ) << raw(data: "\xdb\0\0\0\0\0\0\0\0\x00" ) << "0_3(0)" ; |
| 259 | |
| 260 | // tag other things |
| 261 | QTest::newRow(dataTag: "unixtime" ) << raw(data: "\xc1\x1a\x55\x4b\xbf\xd3" ) << "1(1431027667)" ; |
| 262 | QTest::newRow(dataTag: "rfc3339date" ) << raw(data: "\xc0\x78\x19" "2015-05-07 12:41:07-07:00" ) |
| 263 | << "0(\"2015-05-07 12:41:07-07:00\")" ; |
| 264 | QTest::newRow(dataTag: "tag6+false" ) << raw(data: "\xc6\xf4" ) << "6(false)" ; |
| 265 | QTest::newRow(dataTag: "tag25+true" ) << raw(data: "\xd8\x19\xf5" ) << "25(true)" ; |
| 266 | QTest::newRow(dataTag: "tag256+null" ) << raw(data: "\xd9\1\0\xf6" ) << "256(null)" ; |
| 267 | QTest::newRow(dataTag: "tag65536+simple32" ) << raw(data: "\xda\0\1\0\0\xf8\x20" ) << "65536(simple(32))" ; |
| 268 | QTest::newRow(dataTag: "float+unixtime" ) << raw(data: "\xc1\xfa\x4e\xaa\x97\x80" ) << "1(1431027712.f)" ; |
| 269 | QTest::newRow(dataTag: "double+unixtime" ) << raw(data: "\xc1\xfb" "\x41\xd5\x52\xef" "\xf4\xc7\xce\xfe" ) |
| 270 | << "1(1431027667.1220088)" ; |
| 271 | } |
| 272 | |
| 273 | void addEmptyContainersData() |
| 274 | { |
| 275 | QTest::newRow(dataTag: "emptyarray" ) << raw(data: "\x80" ) << "[]" << 0; |
| 276 | QTest::newRow(dataTag: "emptymap" ) << raw(data: "\xa0" ) << "{}" << 0; |
| 277 | QTest::newRow(dataTag: "_emptyarray" ) << raw(data: "\x9f\xff" ) << "[_ ]" << -1; |
| 278 | QTest::newRow(dataTag: "_emptymap" ) << raw(data: "\xbf\xff" ) << "{_ }" << -1; |
| 279 | } |
| 280 | |
| 281 | void addMapMixedData() |
| 282 | { |
| 283 | QTest::newRow(dataTag: "map-0-24" ) << raw(data: "\xa1\0\x18\x18" ) << "{0: 24}" << 1; |
| 284 | QTest::newRow(dataTag: "map-0*1-24" ) << raw(data: "\xa1\x18\0\x18\x18" ) << "{0_0: 24}" << 1; |
| 285 | QTest::newRow(dataTag: "map-0*1-24*2" ) << raw(data: "\xa1\x18\0\x19\0\x18" ) << "{0_0: 24_1}" << 1; |
| 286 | QTest::newRow(dataTag: "map-0*4-24*2" ) << raw(data: "\xa1\x1a\0\0\0\0\x19\0\x18" ) << "{0_2: 24_1}" << 1; |
| 287 | QTest::newRow(dataTag: "map-24-0" ) << raw(data: "\xa1\x18\x18\0" ) << "{24: 0}" << 1; |
| 288 | QTest::newRow(dataTag: "map-24-0*1" ) << raw(data: "\xa1\x18\x18\x18\0" ) << "{24: 0_0}" << 1; |
| 289 | QTest::newRow(dataTag: "map-255-65535" ) << raw(data: "\xa1\x18\xff\x19\xff\xff" ) << "{255: 65535}" << 1; |
| 290 | |
| 291 | QTest::newRow(dataTag: "_map-0-24" ) << raw(data: "\xbf\0\x18\x18\xff" ) << "{_ 0: 24}" << 1; |
| 292 | QTest::newRow(dataTag: "_map-0*1-24" ) << raw(data: "\xbf\x18\0\x18\x18\xff" ) << "{_ 0_0: 24}" << 1; |
| 293 | QTest::newRow(dataTag: "_map-0*1-24*2" ) << raw(data: "\xbf\x18\0\x19\0\x18\xff" ) << "{_ 0_0: 24_1}" << 1; |
| 294 | QTest::newRow(dataTag: "_map-0*4-24*2" ) << raw(data: "\xbf\x1a\0\0\0\0\x19\0\x18\xff" ) << "{_ 0_2: 24_1}" << 1; |
| 295 | QTest::newRow(dataTag: "_map-24-0" ) << raw(data: "\xbf\x18\x18\0\xff" ) << "{_ 24: 0}" << 1; |
| 296 | QTest::newRow(dataTag: "_map-24-0*1" ) << raw(data: "\xbf\x18\x18\x18\0\xff" ) << "{_ 24: 0_0}" << 1; |
| 297 | QTest::newRow(dataTag: "_map-255-65535" ) << raw(data: "\xbf\x18\xff\x19\xff\xff\xff" ) << "{_ 255: 65535}" << 1; |
| 298 | } |
| 299 | |
| 300 | void addChunkedStringData() |
| 301 | { |
| 302 | QTest::addColumn<QByteArray>(name: "data" ); |
| 303 | QTest::addColumn<QString>(name: "concatenated" ); |
| 304 | QTest::addColumn<QStringList>(name: "chunks" ); |
| 305 | |
| 306 | // non-chunked: |
| 307 | QTest::newRow(dataTag: "emptybytestring" ) << raw(data: "\x40" ) << "h''" << QStringList{"h''" }; |
| 308 | QTest::newRow(dataTag: "bytestring1" ) << raw(data: "\x41 " ) << "h'20'" << QStringList{"h'20'" }; |
| 309 | QTest::newRow(dataTag: "emptytextstring" ) << raw(data: "\x60" ) << "\"\"" << QStringList{"\"\"" }; |
| 310 | QTest::newRow(dataTag: "textstring1" ) << raw(data: "\x61 " ) << "\" \"" << QStringList{"\" \"" }; |
| 311 | |
| 312 | // empty chunked: |
| 313 | QTest::newRow(dataTag: "_emptybytestring" ) << raw(data: "\x5f\xff" ) << "h''" << QStringList{}; |
| 314 | QTest::newRow(dataTag: "_emptytextstring" ) << raw(data: "\x7f\xff" ) << "\"\"" << QStringList{}; |
| 315 | QTest::newRow(dataTag: "_emptybytestring2" ) << raw(data: "\x5f\x40\xff" ) << "h''" << QStringList{"h''" }; |
| 316 | QTest::newRow(dataTag: "_emptytextstring2" ) << raw(data: "\x7f\x60\xff" ) << "\"\"" << QStringList{"\"\"" }; |
| 317 | QTest::newRow(dataTag: "_emptybytestring3" ) << raw(data: "\x5f\x40\x40\xff" ) << "h''" << QStringList{"h''" , "h''" }; |
| 318 | QTest::newRow(dataTag: "_emptytextstring3" ) << raw(data: "\x7f\x60\x60\xff" ) << "\"\"" << QStringList{"\"\"" , "\"\"" }; |
| 319 | |
| 320 | // regular chunks |
| 321 | QTest::newRow(dataTag: "_bytestring1" ) << raw(data: "\x5f\x41 \xff" ) << "h'20'" << QStringList{"h'20'" }; |
| 322 | QTest::newRow(dataTag: "_bytestring2" ) << raw(data: "\x5f\x41 \x41z\xff" ) << "h'207a'" << QStringList{"h'20'" , "h'7a'" }; |
| 323 | QTest::newRow(dataTag: "_bytestring3" ) << raw(data: "\x5f\x41 \x58\x18" "123456789012345678901234\x41z\xff" ) |
| 324 | << "h'203132333435363738393031323334353637383930313233347a'" |
| 325 | << QStringList{"h'20'" , "h'313233343536373839303132333435363738393031323334'" , "h'7a'" }; |
| 326 | |
| 327 | QTest::newRow(dataTag: "_textstring1" ) << raw(data: "\x7f\x61 \xff" ) << "\" \"" << QStringList{"\" \"" }; |
| 328 | QTest::newRow(dataTag: "_textstring2" ) << raw(data: "\x7f\x61 \x61z\xff" ) << "\" z\"" << QStringList{"\" \"" , "\"z\"" }; |
| 329 | QTest::newRow(dataTag: "_textstring3" ) << raw(data: "\x7f\x61 \x78\x18" "123456789012345678901234\x61z\xff" ) |
| 330 | << "\" 123456789012345678901234z\"" |
| 331 | << QStringList{"\" \"" , "\"123456789012345678901234\"" , "\"z\"" }; |
| 332 | } |
| 333 | |
| 334 | void addValidationColumns() |
| 335 | { |
| 336 | QTest::addColumn<QByteArray>(name: "data" ); |
| 337 | QTest::addColumn<int>(name: "flags" ); // future |
| 338 | QTest::addColumn<CborError>(name: "expectedError" ); |
| 339 | } |
| 340 | |
| 341 | void addValidationData(size_t minInvalid = ~size_t(0)) |
| 342 | { |
| 343 | // illegal numbers are future extension points |
| 344 | QTest::newRow(dataTag: "illegal-number-in-unsigned-1" ) << raw(data: "\x81\x1c" ) << 0 << CborErrorIllegalNumber; |
| 345 | QTest::newRow(dataTag: "illegal-number-in-unsigned-2" ) << raw(data: "\x81\x1d" ) << 0 << CborErrorIllegalNumber; |
| 346 | QTest::newRow(dataTag: "illegal-number-in-unsigned-3" ) << raw(data: "\x81\x1e" ) << 0 << CborErrorIllegalNumber; |
| 347 | QTest::newRow(dataTag: "illegal-number-in-unsigned-4" ) << raw(data: "\x81\x1f" ) << 0 << CborErrorIllegalNumber; |
| 348 | QTest::newRow(dataTag: "illegal-number-in-negative-1" ) << raw(data: "\x81\x3c" ) << 0 << CborErrorIllegalNumber; |
| 349 | QTest::newRow(dataTag: "illegal-number-in-negative-2" ) << raw(data: "\x81\x3d" ) << 0 << CborErrorIllegalNumber; |
| 350 | QTest::newRow(dataTag: "illegal-number-in-negative-3" ) << raw(data: "\x81\x3e" ) << 0 << CborErrorIllegalNumber; |
| 351 | QTest::newRow(dataTag: "illegal-number-in-negative-4" ) << raw(data: "\x81\x3f" ) << 0 << CborErrorIllegalNumber; |
| 352 | QTest::newRow(dataTag: "illegal-number-in-bytearray-length-1" ) << raw(data: "\x81\x5c" ) << 0 << CborErrorIllegalNumber; |
| 353 | QTest::newRow(dataTag: "illegal-number-in-bytearray-length-2" ) << raw(data: "\x81\x5d" ) << 0 << CborErrorIllegalNumber; |
| 354 | QTest::newRow(dataTag: "illegal-number-in-bytearray-length-3" ) << raw(data: "\x81\x5e" ) << 0 << CborErrorIllegalNumber; |
| 355 | QTest::newRow(dataTag: "illegal-number-in-string-length-1" ) << raw(data: "\x81\x7c" ) << 0 << CborErrorIllegalNumber; |
| 356 | QTest::newRow(dataTag: "illegal-number-in-string-length-2" ) << raw(data: "\x81\x7d" ) << 0 << CborErrorIllegalNumber; |
| 357 | QTest::newRow(dataTag: "illegal-number-in-string-length-3" ) << raw(data: "\x81\x7e" ) << 0 << CborErrorIllegalNumber; |
| 358 | QTest::newRow(dataTag: "illegal-number-in-array-length-1" ) << raw(data: "\x81\x9c" ) << 0 << CborErrorIllegalNumber; |
| 359 | QTest::newRow(dataTag: "illegal-number-in-array-length-2" ) << raw(data: "\x81\x9d" ) << 0 << CborErrorIllegalNumber; |
| 360 | QTest::newRow(dataTag: "illegal-number-in-array-length-3" ) << raw(data: "\x81\x9e" ) << 0 << CborErrorIllegalNumber; |
| 361 | QTest::newRow(dataTag: "illegal-number-in-map-length-1" ) << raw(data: "\x81\xbc" ) << 0 << CborErrorIllegalNumber; |
| 362 | QTest::newRow(dataTag: "illegal-number-in-map-length-2" ) << raw(data: "\x81\xbd" ) << 0 << CborErrorIllegalNumber; |
| 363 | QTest::newRow(dataTag: "illegal-number-in-map-length-3" ) << raw(data: "\x81\xbe" ) << 0 << CborErrorIllegalNumber; |
| 364 | QTest::newRow(dataTag: "illegal-number-in-tag-1" ) << raw(data: "\x81\xdc" ) << 0 << CborErrorIllegalNumber; |
| 365 | QTest::newRow(dataTag: "illegal-number-in-tag-2" ) << raw(data: "\x81\xdd" ) << 0 << CborErrorIllegalNumber; |
| 366 | QTest::newRow(dataTag: "illegal-number-in-tag-3" ) << raw(data: "\x81\xde" ) << 0 << CborErrorIllegalNumber; |
| 367 | QTest::newRow(dataTag: "illegal-number-in-tag-4" ) << raw(data: "\x81\xdf" ) << 0 << CborErrorIllegalNumber; |
| 368 | |
| 369 | QTest::newRow(dataTag: "unsigned-too-short-1-0" ) << raw(data: "\x81\x18" ) << 0 << CborErrorUnexpectedEOF; // requires 1 byte, 0 given |
| 370 | QTest::newRow(dataTag: "unsigned-too-short-2-0" ) << raw(data: "\x81\x19" ) << 0 << CborErrorUnexpectedEOF; // requires 2 bytes, 0 given |
| 371 | QTest::newRow(dataTag: "unsigned-too-short-2-1" ) << raw(data: "\x81\x19\x01" ) << 0 << CborErrorUnexpectedEOF; // etc |
| 372 | QTest::newRow(dataTag: "unsigned-too-short-4-0" ) << raw(data: "\x81\x1a" ) << 0 << CborErrorUnexpectedEOF; |
| 373 | QTest::newRow(dataTag: "unsigned-too-short-4-3" ) << raw(data: "\x81\x1a\x01\x02\x03" ) << 0 << CborErrorUnexpectedEOF; |
| 374 | QTest::newRow(dataTag: "unsigned-too-short-8-0" ) << raw(data: "\x81\x1b" ) << 0 << CborErrorUnexpectedEOF; |
| 375 | QTest::newRow(dataTag: "unsigned-too-short-8-7" ) << raw(data: "\x81\x1b\1\2\3\4\5\6\7" ) << 0 << CborErrorUnexpectedEOF; |
| 376 | QTest::newRow(dataTag: "negative-length-too-short-1-0" ) << raw(data: "\x81\x38" ) << 0 << CborErrorUnexpectedEOF; |
| 377 | QTest::newRow(dataTag: "negative-length-too-short-2-0" ) << raw(data: "\x81\x39" ) << 0 << CborErrorUnexpectedEOF; |
| 378 | QTest::newRow(dataTag: "negative-length-too-short-2-1" ) << raw(data: "\x81\x39\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 379 | QTest::newRow(dataTag: "negative-length-too-short-4-0" ) << raw(data: "\x81\x3a" ) << 0 << CborErrorUnexpectedEOF; |
| 380 | QTest::newRow(dataTag: "negative-length-too-short-4-3" ) << raw(data: "\x81\x3a\x01\x02\x03" ) << 0 << CborErrorUnexpectedEOF; |
| 381 | QTest::newRow(dataTag: "negative-length-too-short-8-0" ) << raw(data: "\x81\x3b" ) << 0 << CborErrorUnexpectedEOF; |
| 382 | QTest::newRow(dataTag: "negative-length-too-short-8-7" ) << raw(data: "\x81\x3b\1\2\3\4\5\6\7" ) << 0 << CborErrorUnexpectedEOF; |
| 383 | QTest::newRow(dataTag: "bytearray-length-too-short-1-0" ) << raw(data: "\x81\x58" ) << 0 << CborErrorUnexpectedEOF; |
| 384 | QTest::newRow(dataTag: "bytearray-length-too-short-2-0" ) << raw(data: "\x81\x59" ) << 0 << CborErrorUnexpectedEOF; |
| 385 | QTest::newRow(dataTag: "bytearray-length-too-short-2-1" ) << raw(data: "\x81\x59\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 386 | QTest::newRow(dataTag: "bytearray-length-too-short-4-0" ) << raw(data: "\x81\x5a" ) << 0 << CborErrorUnexpectedEOF; |
| 387 | QTest::newRow(dataTag: "bytearray-length-too-short-4-3" ) << raw(data: "\x81\x5a\x01\x02\x03" ) << 0 << CborErrorUnexpectedEOF; |
| 388 | QTest::newRow(dataTag: "bytearray-length-too-short-8-0" ) << raw(data: "\x81\x5b" ) << 0 << CborErrorUnexpectedEOF; |
| 389 | QTest::newRow(dataTag: "bytearray-length-too-short-8-7" ) << raw(data: "\x81\x5b\1\2\3\4\5\6\7" ) << 0 << CborErrorUnexpectedEOF; |
| 390 | QTest::newRow(dataTag: "string-length-too-short-1-0" ) << raw(data: "\x81\x78" ) << 0 << CborErrorUnexpectedEOF; |
| 391 | QTest::newRow(dataTag: "string-length-too-short-2-0" ) << raw(data: "\x81\x79" ) << 0 << CborErrorUnexpectedEOF; |
| 392 | QTest::newRow(dataTag: "string-length-too-short-2-1" ) << raw(data: "\x81\x79\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 393 | QTest::newRow(dataTag: "string-length-too-short-4-0" ) << raw(data: "\x81\x7a" ) << 0 << CborErrorUnexpectedEOF; |
| 394 | QTest::newRow(dataTag: "string-length-too-short-4-3" ) << raw(data: "\x81\x7a\x01\x02\x03" ) << 0 << CborErrorUnexpectedEOF; |
| 395 | QTest::newRow(dataTag: "string-length-too-short-8-0" ) << raw(data: "\x81\x7b" ) << 0 << CborErrorUnexpectedEOF; |
| 396 | QTest::newRow(dataTag: "string-length-too-short-8-7" ) << raw(data: "\x81\x7b\1\2\3\4\5\6\7" ) << 0 << CborErrorUnexpectedEOF; |
| 397 | QTest::newRow(dataTag: "bytearray-chunked-length-too-short-1-0" ) << raw(data: "\x81\x5f\x58" ) << 0 << CborErrorUnexpectedEOF; |
| 398 | QTest::newRow(dataTag: "bytearray-chunked-length-too-short-2-0" ) << raw(data: "\x81\x5f\x59" ) << 0 << CborErrorUnexpectedEOF; |
| 399 | QTest::newRow(dataTag: "bytearray-chunked-length-too-short-2-1" ) << raw(data: "\x81\x5f\x59\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 400 | QTest::newRow(dataTag: "bytearray-chunked-length-too-short-4-0" ) << raw(data: "\x81\x5f\x5a" ) << 0 << CborErrorUnexpectedEOF; |
| 401 | QTest::newRow(dataTag: "bytearray-chunked-length-too-short-4-3" ) << raw(data: "\x81\x5f\x5a\x01\x02\x03" ) << 0 << CborErrorUnexpectedEOF; |
| 402 | QTest::newRow(dataTag: "bytearray-chunked-length-too-short-8-0" ) << raw(data: "\x81\x5f\x5b" ) << 0 << CborErrorUnexpectedEOF; |
| 403 | QTest::newRow(dataTag: "bytearray-chunked-length-too-short-8-7" ) << raw(data: "\x81\x5f\x5b\1\2\3\4\5\6\7" ) << 0 << CborErrorUnexpectedEOF; |
| 404 | QTest::newRow(dataTag: "string-chunked-length-too-short-1-0" ) << raw(data: "\x81\x7f\x78" ) << 0 << CborErrorUnexpectedEOF; |
| 405 | QTest::newRow(dataTag: "string-chunked-length-too-short-2-0" ) << raw(data: "\x81\x7f\x79" ) << 0 << CborErrorUnexpectedEOF; |
| 406 | QTest::newRow(dataTag: "string-chunked-length-too-short-2-1" ) << raw(data: "\x81\x7f\x79\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 407 | QTest::newRow(dataTag: "string-chunked-length-too-short-4-0" ) << raw(data: "\x81\x7f\x7a" ) << 0 << CborErrorUnexpectedEOF; |
| 408 | QTest::newRow(dataTag: "string-chunked-length-too-short-4-3" ) << raw(data: "\x81\x7f\x7a\x01\x02\x03" ) << 0 << CborErrorUnexpectedEOF; |
| 409 | QTest::newRow(dataTag: "string-chunked-length-too-short-8-0" ) << raw(data: "\x81\x7f\x7b" ) << 0 << CborErrorUnexpectedEOF; |
| 410 | QTest::newRow(dataTag: "string-chunked-length-too-short-8-7" ) << raw(data: "\x81\x7f\x7b\1\2\3\4\5\6\7" ) << 0 << CborErrorUnexpectedEOF; |
| 411 | QTest::newRow(dataTag: "bytearray-chunked-2-length-too-short-1-0" ) << raw(data: "\x81\x5f\x40\x58" ) << 0 << CborErrorUnexpectedEOF; |
| 412 | QTest::newRow(dataTag: "bytearray-chunked-2-length-too-short-2-0" ) << raw(data: "\x81\x5f\x40\x59" ) << 0 << CborErrorUnexpectedEOF; |
| 413 | QTest::newRow(dataTag: "bytearray-chunked-2-length-too-short-2-1" ) << raw(data: "\x81\x5f\x40\x59\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 414 | QTest::newRow(dataTag: "bytearray-chunked-2-length-too-short-4-0" ) << raw(data: "\x81\x5f\x40\x5a" ) << 0 << CborErrorUnexpectedEOF; |
| 415 | QTest::newRow(dataTag: "bytearray-chunked-2-length-too-short-4-3" ) << raw(data: "\x81\x5f\x40\x5a\x01\x02\x03" ) << 0 << CborErrorUnexpectedEOF; |
| 416 | QTest::newRow(dataTag: "bytearray-chunked-2-length-too-short-8-0" ) << raw(data: "\x81\x5f\x40\x5b" ) << 0 << CborErrorUnexpectedEOF; |
| 417 | QTest::newRow(dataTag: "bytearray-chunked-2-length-too-short-8-7" ) << raw(data: "\x81\x5f\x40\x5b\1\2\3\4\5\6\7" ) << 0 << CborErrorUnexpectedEOF; |
| 418 | QTest::newRow(dataTag: "string-chunked-2-length-too-short-1-0" ) << raw(data: "\x81\x7f\x60\x78" ) << 0 << CborErrorUnexpectedEOF; |
| 419 | QTest::newRow(dataTag: "string-chunked-2-length-too-short-2-0" ) << raw(data: "\x81\x7f\x60\x79" ) << 0 << CborErrorUnexpectedEOF; |
| 420 | QTest::newRow(dataTag: "string-chunked-2-length-too-short-2-1" ) << raw(data: "\x81\x7f\x60\x79\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 421 | QTest::newRow(dataTag: "string-chunked-2-length-too-short-4-0" ) << raw(data: "\x81\x7f\x60\x7a" ) << 0 << CborErrorUnexpectedEOF; |
| 422 | QTest::newRow(dataTag: "string-chunked-2-length-too-short-4-3" ) << raw(data: "\x81\x7f\x60\x7a\x01\x02\x03" ) << 0 << CborErrorUnexpectedEOF; |
| 423 | QTest::newRow(dataTag: "string-chunked-2-length-too-short-8-0" ) << raw(data: "\x81\x7f\x60\x7b" ) << 0 << CborErrorUnexpectedEOF; |
| 424 | QTest::newRow(dataTag: "string-chunked-2-length-too-short-8-7" ) << raw(data: "\x81\x7f\x60\x7b\1\2\3\4\5\6\7" ) << 0 << CborErrorUnexpectedEOF; |
| 425 | QTest::newRow(dataTag: "array-length-too-short-1-0" ) << raw(data: "\x81\x98" ) << 0 << CborErrorUnexpectedEOF; |
| 426 | QTest::newRow(dataTag: "array-length-too-short-2-0" ) << raw(data: "\x81\x99" ) << 0 << CborErrorUnexpectedEOF; |
| 427 | QTest::newRow(dataTag: "array-length-too-short-2-1" ) << raw(data: "\x81\x99\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 428 | QTest::newRow(dataTag: "array-length-too-short-4-0" ) << raw(data: "\x81\x9a" ) << 0 << CborErrorUnexpectedEOF; |
| 429 | QTest::newRow(dataTag: "array-length-too-short-4-3" ) << raw(data: "\x81\x9a\x01\x02\x03" ) << 0 << CborErrorUnexpectedEOF; |
| 430 | QTest::newRow(dataTag: "array-length-too-short-8-0" ) << raw(data: "\x81\x9b" ) << 0 << CborErrorUnexpectedEOF; |
| 431 | QTest::newRow(dataTag: "array-length-too-short-8-7" ) << raw(data: "\x81\x9b\1\2\3\4\5\6\7" ) << 0 << CborErrorUnexpectedEOF; |
| 432 | QTest::newRow(dataTag: "map-length-too-short-1-0" ) << raw(data: "\x81\xb8" ) << 0 << CborErrorUnexpectedEOF; |
| 433 | QTest::newRow(dataTag: "map-length-too-short-2-0" ) << raw(data: "\x81\xb9" ) << 0 << CborErrorUnexpectedEOF; |
| 434 | QTest::newRow(dataTag: "map-length-too-short-2-1" ) << raw(data: "\x81\xb9\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 435 | QTest::newRow(dataTag: "map-length-too-short-4-0" ) << raw(data: "\x81\xba" ) << 0 << CborErrorUnexpectedEOF; |
| 436 | QTest::newRow(dataTag: "map-length-too-short-4-3" ) << raw(data: "\x81\xba\x01\x02\x03" ) << 0 << CborErrorUnexpectedEOF; |
| 437 | QTest::newRow(dataTag: "map-length-too-short-8-0" ) << raw(data: "\x81\xbb" ) << 0 << CborErrorUnexpectedEOF; |
| 438 | QTest::newRow(dataTag: "map-length-too-short-8-7" ) << raw(data: "\x81\xbb\1\2\3\4\5\6\7" ) << 0 << CborErrorUnexpectedEOF; |
| 439 | QTest::newRow(dataTag: "tag-too-short-1-0" ) << raw(data: "\x81\xd8" ) << 0 << CborErrorUnexpectedEOF; |
| 440 | QTest::newRow(dataTag: "tag-too-short-2-0" ) << raw(data: "\x81\xd9" ) << 0 << CborErrorUnexpectedEOF; |
| 441 | QTest::newRow(dataTag: "tag-too-short-2-1" ) << raw(data: "\x81\xd9\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 442 | QTest::newRow(dataTag: "tag-too-short-4-0" ) << raw(data: "\x81\xda" ) << 0 << CborErrorUnexpectedEOF; |
| 443 | QTest::newRow(dataTag: "tag-too-short-4-3" ) << raw(data: "\x81\xda\x01\x02\x03" ) << 0 << CborErrorUnexpectedEOF; |
| 444 | QTest::newRow(dataTag: "tag-too-short-8-0" ) << raw(data: "\x81\xdb" ) << 0 << CborErrorUnexpectedEOF; |
| 445 | QTest::newRow(dataTag: "tag-too-short-8-7" ) << raw(data: "\x81\xdb\1\2\3\4\5\6\7" ) << 0 << CborErrorUnexpectedEOF; |
| 446 | QTest::newRow(dataTag: "fp16-too-short1" ) << raw(data: "\x81\xf9" ) << 0 << CborErrorUnexpectedEOF; |
| 447 | QTest::newRow(dataTag: "fp16-too-short2" ) << raw(data: "\x81\xf9\x00" ) << 0 << CborErrorUnexpectedEOF; |
| 448 | QTest::newRow(dataTag: "float-too-short1" ) << raw(data: "\x81\xfa" ) << 0 << CborErrorUnexpectedEOF; |
| 449 | QTest::newRow(dataTag: "float-too-short2" ) << raw(data: "\x81\xfa\0\0\0" ) << 0 << CborErrorUnexpectedEOF; |
| 450 | QTest::newRow(dataTag: "double-too-short1" ) << raw(data: "\x81\xfb" ) << 0 << CborErrorUnexpectedEOF; |
| 451 | QTest::newRow(dataTag: "double-too-short2" ) << raw(data: "\x81\xfb\0\0\0\0\0\0\0" ) << 0 << CborErrorUnexpectedEOF; |
| 452 | |
| 453 | QTest::newRow(dataTag: "bytearray-too-short1" ) << raw(data: "\x81\x42z" ) << 0 << CborErrorUnexpectedEOF; |
| 454 | QTest::newRow(dataTag: "bytearray-too-short2" ) << raw(data: "\x81\x58\x02z" ) << 0 << CborErrorUnexpectedEOF; |
| 455 | QTest::newRow(dataTag: "bytearray-too-short3" ) << raw(data: "\x81\x5a\0\0\0\2z" ) << 0 << CborErrorUnexpectedEOF; |
| 456 | QTest::newRow(dataTag: "bytearray-too-short4" ) << raw(data: "\x81\x5b\0\0\0\0\0\0\0\2z" ) << 0 << CborErrorUnexpectedEOF; |
| 457 | QTest::newRow(dataTag: "string-too-short1" ) << raw(data: "\x81\x62z" ) << 0 << CborErrorUnexpectedEOF; |
| 458 | QTest::newRow(dataTag: "string-too-short2" ) << raw(data: "\x81\x78\x02z" ) << 0 << CborErrorUnexpectedEOF; |
| 459 | QTest::newRow(dataTag: "string-too-short3" ) << raw(data: "\x81\x7a\0\0\0\2z" ) << 0 << CborErrorUnexpectedEOF; |
| 460 | QTest::newRow(dataTag: "string-too-short4" ) << raw(data: "\x81\x7b\0\0\0\0\0\0\0\2z" ) << 0 << CborErrorUnexpectedEOF; |
| 461 | QTest::newRow(dataTag: "bytearray-chunked-too-short1" ) << raw(data: "\x81\x5f\x42z" ) << 0 << CborErrorUnexpectedEOF; |
| 462 | QTest::newRow(dataTag: "bytearray-chunked-too-short2" ) << raw(data: "\x81\x5f\x58\x02z" ) << 0 << CborErrorUnexpectedEOF; |
| 463 | QTest::newRow(dataTag: "bytearray-chunked-too-short3" ) << raw(data: "\x81\x5f\x5a\0\0\0\2z" ) << 0 << CborErrorUnexpectedEOF; |
| 464 | QTest::newRow(dataTag: "bytearray-chunked-too-short4" ) << raw(data: "\x81\x5f\x5b\0\0\0\0\0\0\0\2z" ) << 0 << CborErrorUnexpectedEOF; |
| 465 | QTest::newRow(dataTag: "string-chunked-too-short1" ) << raw(data: "\x81\x7f\x62z" ) << 0 << CborErrorUnexpectedEOF; |
| 466 | QTest::newRow(dataTag: "string-chunked-too-short2" ) << raw(data: "\x81\x7f\x78\x02z" ) << 0 << CborErrorUnexpectedEOF; |
| 467 | QTest::newRow(dataTag: "string-chunked-too-short3" ) << raw(data: "\x81\x7f\x7a\0\0\0\2z" ) << 0 << CborErrorUnexpectedEOF; |
| 468 | QTest::newRow(dataTag: "string-chunked-too-short4" ) << raw(data: "\x81\x7f\x7b\0\0\0\0\0\0\0\2z" ) << 0 << CborErrorUnexpectedEOF; |
| 469 | QTest::newRow(dataTag: "bytearray-chunked-too-short1x2" ) << raw(data: "\x81\x5f\x40\x42z" ) << 0 << CborErrorUnexpectedEOF; |
| 470 | QTest::newRow(dataTag: "bytearray-chunked-too-short2x2" ) << raw(data: "\x81\x5f\x40\x58\x02z" ) << 0 << CborErrorUnexpectedEOF; |
| 471 | QTest::newRow(dataTag: "bytearray-chunked-too-short3x2" ) << raw(data: "\x81\x5f\x40\x5a\0\0\0\2z" ) << 0 << CborErrorUnexpectedEOF; |
| 472 | QTest::newRow(dataTag: "bytearray-chunked-too-short4x2" ) << raw(data: "\x81\x5f\x40\x5b\0\0\0\0\0\0\0\2z" ) << 0 << CborErrorUnexpectedEOF; |
| 473 | QTest::newRow(dataTag: "string-chunked-too-short1x2" ) << raw(data: "\x81\x7f\x60\x62z" ) << 0 << CborErrorUnexpectedEOF; |
| 474 | QTest::newRow(dataTag: "string-chunked-too-short2x2" ) << raw(data: "\x81\x7f\x60\x78\x02z" ) << 0 << CborErrorUnexpectedEOF; |
| 475 | QTest::newRow(dataTag: "string-chunked-too-short3x2" ) << raw(data: "\x81\x7f\x60\x7a\0\0\0\2z" ) << 0 << CborErrorUnexpectedEOF; |
| 476 | QTest::newRow(dataTag: "string-chunked-too-short4x2" ) << raw(data: "\x81\x7f\x60\x7b\0\0\0\0\0\0\0\2z" ) << 0 << CborErrorUnexpectedEOF; |
| 477 | |
| 478 | QTest::newRow(dataTag: "bytearray-no-break1" ) << raw(data: "\x81\x5f" ) << 0 << CborErrorUnexpectedEOF; |
| 479 | QTest::newRow(dataTag: "bytearray-no-break2" ) << raw(data: "\x81\x5f\x40" ) << 0 << CborErrorUnexpectedEOF; |
| 480 | QTest::newRow(dataTag: "string-no-break1" ) << raw(data: "\x81\x7f" ) << 0 << CborErrorUnexpectedEOF; |
| 481 | QTest::newRow(dataTag: "string-no-break2" ) << raw(data: "\x81\x7f\x60" ) << 0 << CborErrorUnexpectedEOF; |
| 482 | QTest::newRow(dataTag: "array-no-break1" ) << raw(data: "\x81\x9f" ) << 0 << CborErrorUnexpectedEOF; |
| 483 | QTest::newRow(dataTag: "array-no-break2" ) << raw(data: "\x81\x9f\0" ) << 0 << CborErrorUnexpectedEOF; |
| 484 | QTest::newRow(dataTag: "map-no-break1" ) << raw(data: "\x81\xbf" ) << 0 << CborErrorUnexpectedEOF; |
| 485 | QTest::newRow(dataTag: "map-no-break2" ) << raw(data: "\x81\xbf\0\0" ) << 0 << CborErrorUnexpectedEOF; |
| 486 | QTest::newRow(dataTag: "map-break-after-key" ) << raw(data: "\x81\xbf\0\xff" ) << 0 << CborErrorUnexpectedBreak; |
| 487 | QTest::newRow(dataTag: "map-break-after-value-tag" ) << raw(data: "\x81\xbf\0\xc0\xff" ) << 0 << CborErrorUnexpectedBreak; |
| 488 | QTest::newRow(dataTag: "map-break-after-value-tag2" ) << raw(data: "\x81\xbf\0\xd8\x20\xff" ) << 0 << CborErrorUnexpectedBreak; |
| 489 | |
| 490 | // check for pointer additions wrapping over the limit of the address space |
| 491 | auto wraparoundError = [minInvalid](uint64_t encodedSize) { |
| 492 | if (encodedSize > minInvalid) |
| 493 | return CborErrorDataTooLarge; |
| 494 | return CborErrorUnexpectedEOF; |
| 495 | }; |
| 496 | constexpr uint64_t FourGB = UINT32_MAX + UINT64_C(1); |
| 497 | // on 32-bit systems, this is a -1 |
| 498 | QTest::newRow(dataTag: "bytearray-wraparound1" ) << raw(data: "\x81\x5a\xff\xff\xff\xff" ) << 0 << wraparoundError(UINT32_MAX); |
| 499 | QTest::newRow(dataTag: "string-wraparound1" ) << raw(data: "\x81\x7a\xff\xff\xff\xff" ) << 0 << wraparoundError(UINT32_MAX); |
| 500 | // on 32-bit systems, a 4GB addition could be dropped |
| 501 | QTest::newRow(dataTag: "bytearray-wraparound2" ) << raw(data: "\x81\x5b\0\0\0\1\0\0\0\0" ) << 0 << wraparoundError(FourGB); |
| 502 | QTest::newRow(dataTag: "string-wraparound2" ) << raw(data: "\x81\x7b\0\0\0\1\0\0\0\0" ) << 0 << wraparoundError(FourGB); |
| 503 | // on 64-bit systems, this could be a -1 |
| 504 | QTest::newRow(dataTag: "bytearray-wraparound3" ) << raw(data: "\x81\x5b\xff\xff\xff\xff\xff\xff\xff\xff" ) << 0 |
| 505 | << wraparoundError(UINT64_MAX); |
| 506 | QTest::newRow(dataTag: "string-wraparound3" ) << raw(data: "\x81\x7b\xff\xff\xff\xff\xff\xff\xff\xff" ) << 0 |
| 507 | << wraparoundError(UINT64_MAX); |
| 508 | |
| 509 | // ditto on chunks |
| 510 | QTest::newRow(dataTag: "bytearray-chunk-wraparound1" ) << raw(data: "\x81\x5f\x5a\xff\xff\xff\xff" ) << 0 << wraparoundError(UINT32_MAX); |
| 511 | QTest::newRow(dataTag: "string-chunk-wraparound1" ) << raw(data: "\x81\x7f\x7a\xff\xff\xff\xff" ) << 0 << wraparoundError(UINT32_MAX); |
| 512 | // on 32-bit systems, a 4GB addition could be dropped |
| 513 | QTest::newRow(dataTag: "bytearray-chunk-wraparound2" ) << raw(data: "\x81\x5f\x5b\0\0\0\1\0\0\0\0" ) << 0 << wraparoundError(FourGB); |
| 514 | QTest::newRow(dataTag: "string-chunk-wraparound2" ) << raw(data: "\x81\x7f\x7b\0\0\0\1\0\0\0\0" ) << 0 << wraparoundError(FourGB); |
| 515 | // on 64-bit systems, this could be a -1 |
| 516 | QTest::newRow(dataTag: "bytearray-chunk-wraparound3" ) << raw(data: "\x81\x5f\x5b\xff\xff\xff\xff\xff\xff\xff\xff" ) << 0 |
| 517 | << wraparoundError(UINT64_MAX); |
| 518 | QTest::newRow(dataTag: "string-chunk-wraparound3" ) << raw(data: "\x81\x7f\x7b\xff\xff\xff\xff\xff\xff\xff\xff" ) << 0 |
| 519 | << wraparoundError(UINT64_MAX); |
| 520 | |
| 521 | QTest::newRow(dataTag: "eof-after-array" ) << raw(data: "\x81" ) << 0 << CborErrorUnexpectedEOF; |
| 522 | QTest::newRow(dataTag: "eof-after-array2" ) << raw(data: "\x81\x78\x20" ) << 0 << CborErrorUnexpectedEOF; |
| 523 | QTest::newRow(dataTag: "eof-after-array-element" ) << raw(data: "\x81\x82\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 524 | QTest::newRow(dataTag: "eof-after-object" ) << raw(data: "\x81\xa1" ) << 0 << CborErrorUnexpectedEOF; |
| 525 | QTest::newRow(dataTag: "eof-after-object2" ) << raw(data: "\x81\xb8\x20" ) << 0 << CborErrorUnexpectedEOF; |
| 526 | QTest::newRow(dataTag: "eof-after-object-key" ) << raw(data: "\x81\xa1\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 527 | QTest::newRow(dataTag: "eof-after-object-value" ) << raw(data: "\x81\xa2\x01\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 528 | QTest::newRow(dataTag: "eof-after-tag" ) << raw(data: "\x81\xc0" ) << 0 << CborErrorUnexpectedEOF; |
| 529 | QTest::newRow(dataTag: "eof-after-tag2" ) << raw(data: "\x81\xd8\x20" ) << 0 << CborErrorUnexpectedEOF; |
| 530 | |
| 531 | // major type 7 has future types |
| 532 | QTest::newRow(dataTag: "future-type-28" ) << raw(data: "\x81\xfc" ) << 0 << CborErrorUnknownType; |
| 533 | QTest::newRow(dataTag: "future-type-29" ) << raw(data: "\x81\xfd" ) << 0 << CborErrorUnknownType; |
| 534 | QTest::newRow(dataTag: "future-type-30" ) << raw(data: "\x81\xfe" ) << 0 << CborErrorUnknownType; |
| 535 | QTest::newRow(dataTag: "unexpected-break" ) << raw(data: "\x81\xff" ) << 0 << CborErrorUnexpectedBreak; |
| 536 | QTest::newRow(dataTag: "illegal-simple-0" ) << raw(data: "\x81\xf8\0" ) << 0 << CborErrorIllegalSimpleType; |
| 537 | QTest::newRow(dataTag: "illegal-simple-31" ) << raw(data: "\x81\xf8\x1f" ) << 0 << CborErrorIllegalSimpleType; |
| 538 | |
| 539 | // not only too big (UINT_MAX or UINT_MAX+1 in size), but also incomplete |
| 540 | if (sizeof(size_t) < sizeof(uint64_t)) { |
| 541 | QTest::newRow(dataTag: "bytearray-too-big1" ) << raw(data: "\x81\x5b\0\0\0\1\0\0\0\0" ) << 0 << CborErrorDataTooLarge; |
| 542 | QTest::newRow(dataTag: "string-too-big1" ) << raw(data: "\x81\x7b\0\0\0\1\0\0\0\0" ) << 0 << CborErrorDataTooLarge; |
| 543 | } |
| 544 | QTest::newRow(dataTag: "array-too-big1" ) << raw(data: "\x81\x9a\xff\xff\xff\xff\0\0\0\0" ) << 0 << CborErrorDataTooLarge; |
| 545 | QTest::newRow(dataTag: "array-too-big2" ) << raw(data: "\x81\x9b\0\0\0\1\0\0\0\0" ) << 0 << CborErrorDataTooLarge; |
| 546 | QTest::newRow(dataTag: "object-too-big1" ) << raw(data: "\x81\xba\xff\xff\xff\xff\0\0\0\0" ) << 0 << CborErrorDataTooLarge; |
| 547 | QTest::newRow(dataTag: "object-too-big2" ) << raw(data: "\x81\xbb\0\0\0\1\0\0\0\0" ) << 0 << CborErrorDataTooLarge; |
| 548 | |
| 549 | QTest::newRow(dataTag: "no-break-for-array0" ) << raw(data: "\x81\x9f" ) << 0 << CborErrorUnexpectedEOF; |
| 550 | QTest::newRow(dataTag: "no-break-for-array1" ) << raw(data: "\x81\x9f\x01" ) << 0 << CborErrorUnexpectedEOF; |
| 551 | |
| 552 | QTest::newRow(dataTag: "no-break-string0" ) << raw(data: "\x81\x7f" ) << 0 << CborErrorUnexpectedEOF; |
| 553 | QTest::newRow(dataTag: "no-break-string1" ) << raw(data: "\x81\x7f\x61Z" ) << 0 << CborErrorUnexpectedEOF; |
| 554 | |
| 555 | QTest::newRow(dataTag: "nested-indefinite-length-bytearrays" ) << raw(data: "\x81\x5f\x5f\xff\xff" ) << 0 << CborErrorIllegalNumber; |
| 556 | QTest::newRow(dataTag: "nested-indefinite-length-strings" ) << raw(data: "\x81\x7f\x7f\xff\xff" ) << 0 << CborErrorIllegalNumber; |
| 557 | |
| 558 | QTest::newRow(dataTag: "string-chunk-unsigned" ) << raw(data: "\x81\x7f\0\xff" ) << 0 << CborErrorIllegalType; |
| 559 | QTest::newRow(dataTag: "string-chunk-negative" ) << raw(data: "\x81\x7f\x20\xff" ) << 0 << CborErrorIllegalType; |
| 560 | QTest::newRow(dataTag: "string-chunk-bytearray" ) << raw(data: "\x81\x7f\x40\xff" ) << 0 << CborErrorIllegalType; |
| 561 | QTest::newRow(dataTag: "string-chunk-array" ) << raw(data: "\x81\x7f\x80\xff" ) << 0 << CborErrorIllegalType; |
| 562 | QTest::newRow(dataTag: "string-chunk-map" ) << raw(data: "\x81\x7f\xa0\xff" ) << 0 << CborErrorIllegalType; |
| 563 | QTest::newRow(dataTag: "string-chunk-tag" ) << raw(data: "\x81\x7f\xc0\xff" ) << 0 << CborErrorIllegalType; |
| 564 | QTest::newRow(dataTag: "string-chunk-tagged-string" ) << raw(data: "\x81\x7f\xc0\x60\xff" ) << 0 << CborErrorIllegalType; |
| 565 | QTest::newRow(dataTag: "string-chunk-simple0" ) << raw(data: "\x81\x7f\xe0\xff" ) << 0 << CborErrorIllegalType; |
| 566 | QTest::newRow(dataTag: "string-chunk-false" ) << raw(data: "\x81\x7f\xf4\xff" ) << 0 << CborErrorIllegalType; |
| 567 | QTest::newRow(dataTag: "string-chunk-true" ) << raw(data: "\x81\x7f\xf5\xff" ) << 0 << CborErrorIllegalType; |
| 568 | QTest::newRow(dataTag: "string-chunk-null" ) << raw(data: "\x81\x7f\xf6\xff" ) << 0 << CborErrorIllegalType; |
| 569 | QTest::newRow(dataTag: "string-chunk-undefined" ) << raw(data: "\x81\x7f\xf7\xff" ) << 0 << CborErrorIllegalType; |
| 570 | |
| 571 | QTest::newRow(dataTag: "bytearray-chunk-string" ) << raw(data: "\x81\x5f\x60\xff" ) << 0 << CborErrorIllegalType; |
| 572 | QTest::newRow(dataTag: "bytearray-chunk-tagged-bytearray" ) << raw(data: "\x81\x7f\xc0\x40\xff" ) << 0 << CborErrorIllegalType; |
| 573 | |
| 574 | // RFC 7049 Section 2.2.2 "Indefinite-Length Byte Strings and Text Strings" says |
| 575 | // Text strings with indefinite lengths act the same as byte strings |
| 576 | // with indefinite lengths, except that all their chunks MUST be |
| 577 | // definite-length text strings. Note that this implies that the bytes |
| 578 | // of a single UTF-8 character cannot be spread between chunks: a new |
| 579 | // chunk can only be started at a character boundary. |
| 580 | // This test technically tests the dumper, not the parser. |
| 581 | QTest::newRow(dataTag: "string-utf8-chunk-split" ) << raw(data: "\x81\x7f\x61\xc2\x61\xa0\xff" ) << 0 << CborErrorInvalidUtf8TextString; |
| 582 | } |
| 583 | |