From 638171eb10cfb186a6c47ec052a3b0c5b6449386 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sat, 7 Nov 2020 09:56:49 -0800 Subject: QCborValue: avoid allocating result if data is insufficient Similar to the previous commit which applied to QCborStreamReader, don't allocate too much data before checking that the stream actually has that much. Pick-to: 5.15 6.0 Fixes: QTBUG-88256 Change-Id: I7b9b97ae9b32412abdc6fffd16454b7568a063ba Reviewed-by: Allan Sandfeld Jensen --- tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp') diff --git a/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp b/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp index 64d4451f08..4ec5095f1c 100644 --- a/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp +++ b/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp @@ -2007,11 +2007,11 @@ void tst_QCborValue::validation_data() qToBigEndian(MinInvalid - 1, toolong + 1); QTest::addRow("bytearray-2chunked+1-too-big-for-qbytearray-%llx", MinInvalid) << ("\x5f\x41z" + QByteArray(toolong, sizeof(toolong)) + '\xff') - << 0 << CborErrorDataTooLarge; + << 0 << CborErrorUnexpectedEOF; toolong[0] |= 0x20; QTest::addRow("string-2chunked+1-too-big-for-qbytearray-%llx", MinInvalid) << ("\x7f\x61z" + QByteArray(toolong, sizeof(toolong)) + '\xff') - << 0 << CborErrorDataTooLarge; + << 0 << CborErrorUnexpectedEOF; // These tests say we have arrays and maps with very large item counts. // They are meant to ensure we don't pre-allocate a lot of memory @@ -2042,7 +2042,6 @@ void tst_QCborValue::validation() QCborParserError parserError; QCborValue decoded = QCborValue::fromCbor(data, &parserError); - if (parserError.error != QCborError::DataTooLarge) // ### temporary!! QCOMPARE(parserError.error, error); if (data.startsWith('\x81')) { @@ -2050,7 +2049,6 @@ void tst_QCborValue::validation() char *ptr = const_cast(data.constData()); QByteArray mid = QByteArray::fromRawData(ptr + 1, data.size() - 1); decoded = QCborValue::fromCbor(mid, &parserError); - if (parserError.error != QCborError::DataTooLarge) // ### temporary!! QCOMPARE(parserError.error, error); } } -- cgit v1.2.3