QCborValue: create a wrapper to set the QCborStreamReader error state
The next commit will need to do so from outside QCborContainerPrivate, where QCborStreamReader::d can't be accessed (private). Change-Id: Iaa63461109844e978376fffd15fa0f6f04081bf2 Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from commit b7da66132bdd196c4f0b0e0fdf53f9e3b9a8bdaf) Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
parent
7ea9f0d3bb
commit
be28eb44a8
@ -757,8 +757,6 @@ QT_BEGIN_NAMESPACE
|
|||||||
|
|
||||||
using namespace QtCbor;
|
using namespace QtCbor;
|
||||||
|
|
||||||
// in qcborstream.cpp
|
|
||||||
extern void qt_cbor_stream_set_error(QCborStreamReaderPrivate *d, QCborError error);
|
|
||||||
|
|
||||||
static void writeDoubleToCbor(QCborStreamWriter &writer, double d, QCborValue::EncodingOptions opt)
|
static void writeDoubleToCbor(QCborStreamWriter &writer, double d, QCborValue::EncodingOptions opt)
|
||||||
{
|
{
|
||||||
@ -1463,6 +1461,13 @@ static QCborValue taggedValueFromCbor(QCborStreamReader &reader)
|
|||||||
return QCborContainerPrivate::makeValue(type, -1, d);
|
return QCborContainerPrivate::makeValue(type, -1, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// in qcborstream.cpp
|
||||||
|
extern void qt_cbor_stream_set_error(QCborStreamReaderPrivate *d, QCborError error);
|
||||||
|
inline void QCborContainerPrivate::setErrorInReader(QCborStreamReader &reader, QCborError error)
|
||||||
|
{
|
||||||
|
qt_cbor_stream_set_error(reader.d.data(), error);
|
||||||
|
}
|
||||||
|
|
||||||
void QCborContainerPrivate::decodeStringFromCbor(QCborStreamReader &reader)
|
void QCborContainerPrivate::decodeStringFromCbor(QCborStreamReader &reader)
|
||||||
{
|
{
|
||||||
auto addByteData_local = [this](QByteArray::size_type len) -> qint64 {
|
auto addByteData_local = [this](QByteArray::size_type len) -> qint64 {
|
||||||
@ -1507,7 +1512,7 @@ void QCborContainerPrivate::decodeStringFromCbor(QCborStreamReader &reader)
|
|||||||
return; // error
|
return; // error
|
||||||
if (len != rawlen) {
|
if (len != rawlen) {
|
||||||
// truncation
|
// truncation
|
||||||
qt_cbor_stream_set_error(reader.d.data(), { QCborError::DataTooLarge });
|
setErrorInReader(reader, { QCborError::DataTooLarge });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1517,7 +1522,7 @@ void QCborContainerPrivate::decodeStringFromCbor(QCborStreamReader &reader)
|
|||||||
e.value = addByteData_local(len);
|
e.value = addByteData_local(len);
|
||||||
if (e.value < 0) {
|
if (e.value < 0) {
|
||||||
// overflow
|
// overflow
|
||||||
qt_cbor_stream_set_error(reader.d.data(), { QCborError::DataTooLarge });
|
setErrorInReader(reader, { QCborError::DataTooLarge });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1531,7 +1536,7 @@ void QCborContainerPrivate::decodeStringFromCbor(QCborStreamReader &reader)
|
|||||||
auto utf8result = QUtf8::isValidUtf8(dataPtr() + data.size() - len, len);
|
auto utf8result = QUtf8::isValidUtf8(dataPtr() + data.size() - len, len);
|
||||||
if (!utf8result.isValidUtf8) {
|
if (!utf8result.isValidUtf8) {
|
||||||
r.status = QCborStreamReader::Error;
|
r.status = QCborStreamReader::Error;
|
||||||
qt_cbor_stream_set_error(reader.d.data(), { QCborError::InvalidUtf8String });
|
setErrorInReader(reader, { QCborError::InvalidUtf8String });
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
isAscii = isAscii && utf8result.isValidAscii;
|
isAscii = isAscii && utf8result.isValidAscii;
|
||||||
@ -1555,7 +1560,7 @@ void QCborContainerPrivate::decodeStringFromCbor(QCborStreamReader &reader)
|
|||||||
|
|
||||||
// error
|
// error
|
||||||
r.status = QCborStreamReader::Error;
|
r.status = QCborStreamReader::Error;
|
||||||
qt_cbor_stream_set_error(reader.d.data(), { QCborError::DataTooLarge });
|
setErrorInReader(reader, { QCborError::DataTooLarge });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r.status == QCborStreamReader::Error) {
|
if (r.status == QCborStreamReader::Error) {
|
||||||
|
@ -392,6 +392,7 @@ public:
|
|||||||
void decodeValueFromCbor(QCborStreamReader &reader);
|
void decodeValueFromCbor(QCborStreamReader &reader);
|
||||||
void decodeFromCbor(QCborStreamReader &reader);
|
void decodeFromCbor(QCborStreamReader &reader);
|
||||||
void decodeStringFromCbor(QCborStreamReader &reader);
|
void decodeStringFromCbor(QCborStreamReader &reader);
|
||||||
|
static inline void setErrorInReader(QCborStreamReader &reader, QCborError error);
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user