diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2018-09-16 09:05:47 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2018-09-25 22:14:07 +0000 |
commit | 7e1a0c07390ed18de074ce5450b272838a3b8ac8 (patch) | |
tree | e9acf3de8ba572b12efac0122d865802408e2069 /src/corelib | |
parent | 4d40f09a45202dff901d4f970a6a7e939797138b (diff) |
Add tests for decoding too-short UTF-8 sequences
We were handling this properly, but not testing them. I guess we weren't
testing because the condition is a valid intermediate state, so
hasFailure() is correct it returning false.
Testing inspired by the bug reported in
https://github.com/intel/tinycbor/issues/137
Change-Id: Ib47c56818178458a88b4fffd1554ecfdd0af637e
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/codecs/qtextcodec.cpp | 16 | ||||
-rw-r--r-- | src/corelib/codecs/qtextcodec.h | 3 | ||||
-rw-r--r-- | src/corelib/codecs/qutfcodec_p.h | 4 |
3 files changed, 19 insertions, 4 deletions
diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp index 7951e95db5..adb84a1856 100644 --- a/src/corelib/codecs/qtextcodec.cpp +++ b/src/corelib/codecs/qtextcodec.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2018 The Qt Company Ltd. +** Copyright (C) 2018 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -1236,6 +1237,19 @@ bool QTextDecoder::hasFailure() const return state.invalidChars != 0; } +/*! + \internal + \since 5.12 + + Determines whether the decoder needs more bytes to continue decoding. That + is, this signifies that the input string ended in the middle of a + multi-byte sequence. Note that it's possible some codecs do not report this. + */ +bool QTextDecoder::needsMoreData() const +{ + return state.remainingChars; +} + QT_END_NAMESPACE #endif // QT_NO_TEXTCODEC diff --git a/src/corelib/codecs/qtextcodec.h b/src/corelib/codecs/qtextcodec.h index 8153bebac8..09d21166d8 100644 --- a/src/corelib/codecs/qtextcodec.h +++ b/src/corelib/codecs/qtextcodec.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2018 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -162,6 +162,7 @@ public: QString toUnicode(const QByteArray &ba); void toUnicode(QString *target, const char *chars, int len); bool hasFailure() const; + bool needsMoreData() const; private: const QTextCodec *c; QTextCodec::ConverterState state; diff --git a/src/corelib/codecs/qutfcodec_p.h b/src/corelib/codecs/qutfcodec_p.h index 659a229dae..7405996fba 100644 --- a/src/corelib/codecs/qutfcodec_p.h +++ b/src/corelib/codecs/qutfcodec_p.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2016 Intel Corporation. +** Copyright (C) 2018 The Qt Company Ltd. +** Copyright (C) 2018 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. |