@@ -122,13 +122,19 @@ struct ParserWrapper
122
122
123
123
~ParserWrapper () { freeMemory (); }
124
124
125
- CborError init (const QByteArray &ba)
125
+ CborError init (const QByteArray &ba, uint32_t flags = 0 )
126
+ {
127
+ return init (ba.constData (), ba.size (), flags);
128
+ }
129
+ CborError init (const char *ptr, int n, uint32_t flags = 0 )
126
130
{
127
131
freeMemory ();
128
- data = allocateMemory (ba. size () );
129
- memcpy (data, ba. data (), ba. size () );
130
- return cbor_parser_init (data, len, 0 , &parser, &first);
132
+ data = allocateMemory (n );
133
+ memcpy (data, ptr, len );
134
+ return cbor_parser_init (data, len, flags , &parser, &first);
131
135
}
136
+ uint8_t *begin () { return data; }
137
+ uint8_t *end () { return data + len; }
132
138
133
139
uint8_t *allocateMemory (size_t );
134
140
void freeMemory ();
@@ -244,47 +250,46 @@ bool compareFailed = true;
244
250
void compareOne_real (const QByteArray &data, const QString &expected, int line, int n = -1 )
245
251
{
246
252
compareFailed = true ;
247
- CborParser parser;
248
- CborValue first;
249
- CborError err = cbor_parser_init (reinterpret_cast <const quint8 *>(data.constData ()), data.length (), 0 , &parser, &first);
253
+ ParserWrapper w;
254
+ CborError err = w.init (data);
250
255
QVERIFY2 (!err, QByteArray::number (line) + " : Got error \" " + cbor_error_string (err) + " \" " );
251
256
252
- if (cbor_value_get_type (&first) == CborArrayType) {
257
+ if (cbor_value_get_type (&w. first ) == CborArrayType) {
253
258
size_t len;
254
259
if (n >= 0 ) {
255
- QVERIFY (cbor_value_is_length_known (&first));
256
- QCOMPARE (cbor_value_get_array_length (&first, &len), CborNoError);
260
+ QVERIFY (cbor_value_is_length_known (&w. first ));
261
+ QCOMPARE (cbor_value_get_array_length (&w. first , &len), CborNoError);
257
262
QCOMPARE (len, size_t (len));
258
263
} else {
259
- QVERIFY (!cbor_value_is_length_known (&first));
260
- QCOMPARE (cbor_value_get_array_length (&first, &len), CborErrorUnknownLength);
264
+ QVERIFY (!cbor_value_is_length_known (&w. first ));
265
+ QCOMPARE (cbor_value_get_array_length (&w. first , &len), CborErrorUnknownLength);
261
266
}
262
- } else if (cbor_value_get_type (&first) == CborMapType) {
267
+ } else if (cbor_value_get_type (&w. first ) == CborMapType) {
263
268
size_t len;
264
269
if (n >= 0 ) {
265
- QVERIFY (cbor_value_is_length_known (&first));
266
- QCOMPARE (cbor_value_get_map_length (&first, &len), CborNoError);
270
+ QVERIFY (cbor_value_is_length_known (&w. first ));
271
+ QCOMPARE (cbor_value_get_map_length (&w. first , &len), CborNoError);
267
272
QCOMPARE (len, size_t (len));
268
273
} else {
269
- QVERIFY (!cbor_value_is_length_known (&first));
270
- QCOMPARE (cbor_value_get_map_length (&first, &len), CborErrorUnknownLength);
274
+ QVERIFY (!cbor_value_is_length_known (&w. first ));
275
+ QCOMPARE (cbor_value_get_map_length (&w. first , &len), CborErrorUnknownLength);
271
276
}
272
- } else if (cbor_value_is_text_string (&first) || cbor_value_is_byte_string (&first)) {
277
+ } else if (cbor_value_is_text_string (&w. first ) || cbor_value_is_byte_string (&w. first )) {
273
278
size_t len;
274
- QCOMPARE (cbor_value_calculate_string_length (&first, &len), CborNoError);
275
- if (cbor_value_is_length_known (&first)) {
279
+ QCOMPARE (cbor_value_calculate_string_length (&w. first , &len), CborNoError);
280
+ if (cbor_value_is_length_known (&w. first )) {
276
281
size_t len2;
277
- QCOMPARE (cbor_value_get_string_length (&first, &len2), CborNoError);
282
+ QCOMPARE (cbor_value_get_string_length (&w. first , &len2), CborNoError);
278
283
QCOMPARE (len2, len);
279
284
} else {
280
- QCOMPARE (cbor_value_get_string_length (&first, &len), CborErrorUnknownLength);
285
+ QCOMPARE (cbor_value_get_string_length (&w. first , &len), CborErrorUnknownLength);
281
286
}
282
287
}
283
288
284
- CborError err2 = cbor_value_validate_basic (&first);
289
+ CborError err2 = cbor_value_validate_basic (&w. first );
285
290
286
291
QString decoded;
287
- err = parseOne (&first, &decoded);
292
+ err = parseOne (&w. first , &decoded);
288
293
QVERIFY2 (!err, QByteArray::number (line) + " : Got error \" " + cbor_error_string (err) +
289
294
" \" ; decoded stream:\n " + decoded.toLatin1 ());
290
295
QCOMPARE (decoded, expected);
@@ -293,7 +298,7 @@ void compareOne_real(const QByteArray &data, const QString &expected, int line,
293
298
QCOMPARE (err2, err);
294
299
295
300
// check that we consumed everything
296
- QCOMPARE ((void *)cbor_value_get_next_byte (&first), (void *)data. constEnd ());
301
+ QCOMPARE ((void *)cbor_value_get_next_byte (&w. first ), (void *)w. end ());
297
302
298
303
compareFailed = false ;
299
304
}
@@ -459,36 +464,35 @@ void tst_Parser::integers()
459
464
QFETCH (qint64, expectedValue);
460
465
QFETCH (bool , inInt64Range);
461
466
462
- CborParser parser;
463
- CborValue first;
464
- CborError err = cbor_parser_init (reinterpret_cast <const quint8 *>(data.constData ()), data.length (), 0 , &parser, &first);
467
+ ParserWrapper w;
468
+ CborError err = w.init (data);
465
469
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
466
- QVERIFY (cbor_value_is_integer (&first));
470
+ QVERIFY (cbor_value_is_integer (&w. first ));
467
471
468
472
uint64_t raw;
469
- cbor_value_get_raw_integer (&first, &raw);
473
+ cbor_value_get_raw_integer (&w. first , &raw);
470
474
QCOMPARE (quint64 (raw), expectedRaw);
471
475
472
476
if (isNegative) {
473
- QVERIFY (cbor_value_is_negative_integer (&first));
474
- QVERIFY (!cbor_value_is_unsigned_integer (&first));
477
+ QVERIFY (cbor_value_is_negative_integer (&w. first ));
478
+ QVERIFY (!cbor_value_is_unsigned_integer (&w. first ));
475
479
} else {
476
- QVERIFY (!cbor_value_is_negative_integer (&first));
477
- QVERIFY (cbor_value_is_unsigned_integer (&first));
480
+ QVERIFY (!cbor_value_is_negative_integer (&w. first ));
481
+ QVERIFY (cbor_value_is_unsigned_integer (&w. first ));
478
482
}
479
483
480
484
int64_t value;
481
485
if (inInt64Range) {
482
- cbor_value_get_int64 (&first, &value);
486
+ cbor_value_get_int64 (&w. first , &value);
483
487
QCOMPARE (qint64 (value), expectedValue);
484
488
}
485
489
486
- err = cbor_value_get_int64_checked (&first, &value);
490
+ err = cbor_value_get_int64_checked (&w. first , &value);
487
491
QCOMPARE (err, inInt64Range ? CborNoError : CborErrorDataTooLarge);
488
492
489
493
int ivalue;
490
494
bool inIntRange = inInt64Range && (expectedValue == int (expectedValue));
491
- err = cbor_value_get_int_checked (&first, &ivalue);
495
+ err = cbor_value_get_int_checked (&w. first , &ivalue);
492
496
QCOMPARE (err, inIntRange ? CborNoError : CborErrorDataTooLarge);
493
497
}
494
498
@@ -966,14 +970,13 @@ void tst_Parser::chunkedString_data()
966
970
static void chunkedStringTest (const QByteArray &data, const QString &concatenated,
967
971
QStringList &chunks, CborType ourType)
968
972
{
969
- CborParser parser;
970
- CborValue first;
971
- CborError err = cbor_parser_init (reinterpret_cast <const quint8 *>(data.constData ()), data.length (), 0 , &parser, &first);
973
+ ParserWrapper w;
974
+ CborError err = w.init (data);
972
975
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
973
976
974
977
CborValue value;
975
- QVERIFY (cbor_value_is_array (&first));
976
- err = cbor_value_enter_container (&first, &value);
978
+ QVERIFY (cbor_value_is_array (&w. first ));
979
+ err = cbor_value_enter_container (&w. first , &value);
977
980
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
978
981
QVERIFY (cbor_value_is_byte_string (&value) || cbor_value_is_text_string (&value));
979
982
@@ -1020,9 +1023,9 @@ static void chunkedStringTest(const QByteArray &data, const QString &concatenate
1020
1023
// confirm EOF
1021
1024
QVERIFY (cbor_value_at_end (&value));
1022
1025
1023
- err = cbor_value_leave_container (&first, &value);
1026
+ err = cbor_value_leave_container (&w. first , &value);
1024
1027
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
1025
- QCOMPARE ((void *)cbor_value_get_next_byte (&first), (void *)data. constEnd ());
1028
+ QCOMPARE ((void *)cbor_value_get_next_byte (&w. first ), (void *)w. end ());
1026
1029
}
1027
1030
1028
1031
void tst_Parser::chunkedString ()
@@ -1112,18 +1115,17 @@ void tst_Parser::stringLength()
1112
1115
QFETCH (QByteArray, data);
1113
1116
QFETCH (int , expected);
1114
1117
1115
- CborParser parser;
1116
- CborValue value;
1117
- CborError err = cbor_parser_init (reinterpret_cast <const quint8 *>(data.constData ()), data.length (), 0 , &parser, &value);
1118
+ ParserWrapper w;
1119
+ CborError err = w.init (data);
1118
1120
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
1119
1121
1120
1122
size_t result;
1121
- err = cbor_value_calculate_string_length (&value , &result);
1123
+ err = cbor_value_calculate_string_length (&w. first , &result);
1122
1124
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
1123
1125
QCOMPARE (result, size_t (expected));
1124
1126
1125
- if (cbor_value_is_length_known (&value )) {
1126
- QCOMPARE (cbor_value_get_string_length (&value , &result), CborNoError);
1127
+ if (cbor_value_is_length_known (&w. first )) {
1128
+ QCOMPARE (cbor_value_get_string_length (&w. first , &result), CborNoError);
1127
1129
QCOMPARE (result, size_t (expected));
1128
1130
}
1129
1131
@@ -1207,25 +1209,24 @@ void compareOneString(const QByteArray &data, const QString &string, bool expect
1207
1209
{
1208
1210
compareFailed = true ;
1209
1211
1210
- CborParser parser;
1211
- CborValue value;
1212
- CborError err = cbor_parser_init (reinterpret_cast <const quint8 *>(data.constData ()), data.length (), 0 , &parser, &value);
1212
+ ParserWrapper w;
1213
+ CborError err = w.init (data);
1213
1214
QVERIFY2 (!err, QByteArray::number (line) + " : Got error \" " + cbor_error_string (err) + " \" " );
1214
1215
1215
1216
bool result;
1216
1217
QByteArray bastring = string.toUtf8 ();
1217
- err = cbor_value_text_string_equals (&value , bastring.constData (), &result);
1218
+ err = cbor_value_text_string_equals (&w. first , bastring.constData (), &result);
1218
1219
QVERIFY2 (!err, QByteArray::number (line) + " : Got error \" " + cbor_error_string (err) + " \" " );
1219
1220
QCOMPARE (result, expected);
1220
1221
1221
1222
if (expected) {
1222
1223
size_t len;
1223
- cbor_value_skip_tag (&value );
1224
- if (cbor_value_is_length_known (&value )) {
1225
- QCOMPARE (cbor_value_get_string_length (&value , &len), CborNoError);
1224
+ cbor_value_skip_tag (&w. first );
1225
+ if (cbor_value_is_length_known (&w. first )) {
1226
+ QCOMPARE (cbor_value_get_string_length (&w. first , &len), CborNoError);
1226
1227
QCOMPARE (int (len), bastring.size ());
1227
1228
}
1228
- QCOMPARE (cbor_value_calculate_string_length (&value , &len), CborNoError);
1229
+ QCOMPARE (cbor_value_calculate_string_length (&w. first , &len), CborNoError);
1229
1230
QCOMPARE (int (len), bastring.size ());
1230
1231
}
1231
1232
@@ -1314,13 +1315,12 @@ void tst_Parser::mapFind()
1314
1315
QFETCH (QByteArray, data);
1315
1316
QFETCH (bool , expected);
1316
1317
1317
- CborParser parser;
1318
- CborValue value;
1319
- CborError err = cbor_parser_init (reinterpret_cast <const quint8 *>(data.constData ()), data.length (), 0 , &parser, &value);
1318
+ ParserWrapper w;
1319
+ CborError err = w.init (data);
1320
1320
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
1321
1321
1322
1322
CborValue element;
1323
- err = cbor_value_map_find_value (&value , " needle" , &element);
1323
+ err = cbor_value_map_find_value (&w. first , " needle" , &element);
1324
1324
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
1325
1325
1326
1326
if (expected) {
@@ -1391,21 +1391,20 @@ void tst_Parser::checkedIntegers()
1391
1391
QFETCH (QVariant, result);
1392
1392
int64_t expected = result.toLongLong ();
1393
1393
1394
- CborParser parser;
1395
- CborValue value;
1396
- CborError err = cbor_parser_init (reinterpret_cast <const quint8 *>(data.constData ()), data.length (), 0 , &parser, &value);
1394
+ ParserWrapper w;
1395
+ CborError err = w.init (data);
1397
1396
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
1398
1397
1399
1398
int64_t v;
1400
- err = cbor_value_get_int64_checked (&value , &v);
1399
+ err = cbor_value_get_int64_checked (&w. first , &v);
1401
1400
if (result.isNull ()) {
1402
1401
QCOMPARE (err, CborErrorDataTooLarge);
1403
1402
} else {
1404
1403
QCOMPARE (v, expected);
1405
1404
}
1406
1405
1407
1406
int v2;
1408
- err = cbor_value_get_int_checked (&value , &v2);
1407
+ err = cbor_value_get_int_checked (&w. first , &v2);
1409
1408
if (result.isNull () || expected < std::numeric_limits<int >::min () || expected > std::numeric_limits<int >::max ()) {
1410
1409
QCOMPARE (err, CborErrorDataTooLarge);
1411
1410
} else {
@@ -1664,14 +1663,13 @@ void tst_Parser::validation()
1664
1663
QFETCH (CborError, expectedError);
1665
1664
1666
1665
QString decoded;
1667
- CborParser parser;
1668
- CborValue first;
1669
- CborError err = cbor_parser_init (reinterpret_cast <const quint8 *>(data.constData ()), data.length (), flags, &parser, &first);
1666
+ ParserWrapper w;
1667
+ CborError err = w.init (data, uint32_t (flags));
1670
1668
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
1671
1669
1672
- CborError err2 = cbor_value_validate_basic (&first);
1673
- CborError err3 = cbor_value_validate (&first, CborValidateBasic);
1674
- err = parseOne (&first, &decoded);
1670
+ CborError err2 = cbor_value_validate_basic (&w. first );
1671
+ CborError err3 = cbor_value_validate (&w. first , CborValidateBasic);
1672
+ err = parseOne (&w. first , &decoded);
1675
1673
QCOMPARE (err, expectedError);
1676
1674
if (!QByteArray (QTest::currentDataTag ()).contains (" utf8" )) {
1677
1675
QCOMPARE (err2, expectedError);
@@ -2070,12 +2068,11 @@ void tst_Parser::resumeParsing()
2070
2068
QFETCH (QString, expected);
2071
2069
2072
2070
for (int len = 0 ; len < data.length () - 1 ; ++len) {
2073
- CborParser parser;
2074
- CborValue first;
2075
- CborError err = cbor_parser_init (reinterpret_cast <const quint8 *>(data.constData ()), len, 0 , &parser, &first);
2071
+ ParserWrapper w;
2072
+ CborError err = w.init (data.constData (), len);
2076
2073
if (!err) {
2077
2074
QString decoded;
2078
- err = parseOne (&first, &decoded);
2075
+ err = parseOne (&w. first , &decoded);
2079
2076
}
2080
2077
if (err != CborErrorUnexpectedEOF)
2081
2078
qDebug () << " Length is" << len;
@@ -2104,14 +2101,13 @@ void tst_Parser::endPointer()
2104
2101
QFETCH (int , offset);
2105
2102
2106
2103
QString decoded;
2107
- CborParser parser;
2108
- CborValue first;
2109
- CborError err = cbor_parser_init (reinterpret_cast <const quint8 *>(data.constData ()), data.length (), 0 , &parser, &first);
2104
+ ParserWrapper w;
2105
+ CborError err = w.init (data);
2110
2106
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
2111
2107
2112
- err = parseOne (&first, &decoded);
2108
+ err = parseOne (&w. first , &decoded);
2113
2109
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
2114
- QCOMPARE (int (first. ptr - reinterpret_cast < const quint8 *>(data. constBegin () )), offset);
2110
+ QCOMPARE (int (cbor_value_get_next_byte (&w. first ) - w. begin ( )), offset);
2115
2111
}
2116
2112
2117
2113
void tst_Parser::recursionLimit_data ()
@@ -2159,24 +2155,23 @@ void tst_Parser::recursionLimit()
2159
2155
{
2160
2156
QFETCH (QByteArray, data);
2161
2157
2162
- CborParser parser;
2163
- CborValue first;
2164
- CborError err = cbor_parser_init (reinterpret_cast <const quint8 *>(data.constData ()), data.length (), 0 , &parser, &first);
2158
+ ParserWrapper w;
2159
+ CborError err = w.init (data);
2165
2160
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
2166
2161
2167
2162
// check that it is valid:
2168
- CborValue it = first;
2163
+ CborValue it = w. first ;
2169
2164
{
2170
2165
QString dummy;
2171
2166
err = parseOne (&it, &dummy);
2172
2167
QVERIFY2 (!err, QByteArray (" Got error \" " ) + cbor_error_string (err) + " \" " );
2173
2168
}
2174
2169
2175
- it = first;
2170
+ it = w. first ;
2176
2171
err = cbor_value_advance (&it);
2177
2172
QCOMPARE (err, CborErrorNestingTooDeep);
2178
2173
2179
- it = first;
2174
+ it = w. first ;
2180
2175
if (cbor_value_is_map (&it)) {
2181
2176
CborValue dummy;
2182
2177
err = cbor_value_map_find_value (&it, " foo" , &dummy);
0 commit comments