@@ -1762,24 +1762,36 @@ void tst_Parser::strictValidation_data()
1762
1762
QTest::newRow (" overlong-_stringx2-0*8" ) << raw (" \x7f\x60\x7b\0\0\0\0\0\0\0\0\xff " ) << int (CborValidateShortestNumbers) << CborErrorOverlongEncoding;
1763
1763
1764
1764
// strict mode
1765
- QTest::newRow (" invalid-utf8-1char" ) << raw (" \x61\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1766
- QTest::newRow (" invalid-utf8-2chars-1" ) << raw (" \x62\xc2\xc0 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1767
- QTest::newRow (" invalid-utf8-2chars-2" ) << raw (" \x62\xc3\xdf " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1768
- QTest::newRow (" invalid-utf8-2chars-3" ) << raw (" \x62\xc7\xf0 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1769
- QTest::newRow (" invalid-utf8-3chars-1" ) << raw (" \x63\xe0\xa0\xc0 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1770
- QTest::newRow (" invalid-utf8-3chars-2" ) << raw (" \x63\xe0\xc0\xa0 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1771
- QTest::newRow (" invalid-utf8-4chars-1" ) << raw (" \x64\xf0\x90\x80\xc0 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1772
- QTest::newRow (" invalid-utf8-4chars-2" ) << raw (" \x64\xf0\x90\xc0\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1773
- QTest::newRow (" invalid-utf8-4chars-3" ) << raw (" \x64\xf0\xc0\x80\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1765
+ // UTF-8 sequences with invalid continuation bytes
1766
+ QTest::newRow (" invalid-utf8-bad-continuation-1char" ) << raw (" \x61\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1767
+ QTest::newRow (" invalid-utf8-bad-continuation-2chars-1" ) << raw (" \x62\xc2\xc0 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1768
+ QTest::newRow (" invalid-utf8-bad-continuation-2chars-2" ) << raw (" \x62\xc3\xdf " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1769
+ QTest::newRow (" invalid-utf8-bad-continuation-2chars-3" ) << raw (" \x62\xc7\xf0 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1770
+ QTest::newRow (" invalid-utf8-bad-continuation-3chars-1" ) << raw (" \x63\xe0\xa0\xc0 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1771
+ QTest::newRow (" invalid-utf8-bad-continuation-3chars-2" ) << raw (" \x63\xe0\xc0\xa0 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1772
+ QTest::newRow (" invalid-utf8-bad-continuation-4chars-1" ) << raw (" \x64\xf0\x90\x80\xc0 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1773
+ QTest::newRow (" invalid-utf8-bad-continuation-4chars-2" ) << raw (" \x64\xf0\x90\xc0\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1774
+ QTest::newRow (" invalid-utf8-bad-continuation-4chars-3" ) << raw (" \x64\xf0\xc0\x80\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1775
+ // Too short UTF-8 sequences (in an array so there's a byte after that would make it valid UTF-8 if it were part of the string)
1776
+ QTest::newRow (" invalid-utf8-too-short-2chars" ) << raw (" \x82\x61\xc2\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1777
+ QTest::newRow (" invalid-utf8-too-short-3chars-1" ) << raw (" \x82\x61\xe0\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1778
+ QTest::newRow (" invalid-utf8-too-short-3chars-2" ) << raw (" \x82\x62\xe0\xa0\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1779
+ QTest::newRow (" invalid-utf8-too-short-4chars-1" ) << raw (" \x82\x61\xf0\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1780
+ QTest::newRow (" invalid-utf8-too-short-4chars-2" ) << raw (" \x82\x62\xf0\x90\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1781
+ QTest::newRow (" invalid-utf8-too-short-4chars-3" ) << raw (" \x82\x63\xf0\x90\x80\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1782
+ // UTF-16 surrogages encoded in UTF-8
1774
1783
QTest::newRow (" invalid-utf8-hi-surrogate" ) << raw (" \x63\xed\xa0\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1775
1784
QTest::newRow (" invalid-utf8-lo-surrogate" ) << raw (" \x63\xed\xb0\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1776
1785
QTest::newRow (" invalid-utf8-surrogate-pair" ) << raw (" \x66\xed\xa0\x80\xed\xb0\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1786
+ // Non-Unicode UTF-8 sequences
1777
1787
QTest::newRow (" invalid-utf8-non-unicode-1" ) << raw (" \x64\xf4\x90\x80\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1778
1788
QTest::newRow (" invalid-utf8-non-unicode-2" ) << raw (" \x65\xf8\x88\x80\x80\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1779
1789
QTest::newRow (" invalid-utf8-non-unicode-3" ) << raw (" \x66\xfc\x84\x80\x80\x80\x80 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1780
1790
QTest::newRow (" invalid-utf8-non-unicode-4" ) << raw (" \x66\xfd\xbf\xbf\xbf\xbf\xbf " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1791
+ // invalid bytes in UTF-8
1781
1792
QTest::newRow (" invalid-utf8-fe" ) << raw (" \x61\xfe " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1782
1793
QTest::newRow (" invalid-utf8-ff" ) << raw (" \x61\xff " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1794
+ // Overlong sequences
1783
1795
QTest::newRow (" invalid-utf8-overlong-1-2" ) << raw (" \x62\xc1\x81 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1784
1796
QTest::newRow (" invalid-utf8-overlong-1-3" ) << raw (" \x63\xe0\x81\x81 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
1785
1797
QTest::newRow (" invalid-utf8-overlong-1-4" ) << raw (" \x64\xf0\x80\x81\x81 " ) << int (CborValidateStrictMode) << CborErrorInvalidUtf8TextString;
0 commit comments