Split malformed UTF-8 validation tests to ensure better coverage.

pull/1022/head
Roger A. Light 7 years ago
parent 75b6851c76
commit cdb22edb1c

@ -83,6 +83,8 @@ static void TEST_utf8_boundary_conditions(void)
static void TEST_utf8_malformed_sequences(void)
{
char buf[100];
int i;
/* 3 Malformed sequences */
/* 3.1 Unexpected continuation bytes */
utf8_helper("3.1.1 First continuation byte 0x80: \"\"", MOSQ_ERR_MALFORMED_UTF8);
@ -95,32 +97,82 @@ static void TEST_utf8_malformed_sequences(void)
utf8_helper("3.1.8 7 continuation bytes: \"€¿€¿€¿€\"", MOSQ_ERR_MALFORMED_UTF8);
/* 3.1.9 Sequence of all 64 possible continuation bytes (0x80-0xbf): */
utf8_helper("<EFBFBD>ƒ„…†‡ˆ‰ŠŒ<EFBFBD>Ž<EFBFBD>", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("<EFBFBD>“”•˜™šœ<EFBFBD>žŸ", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper(" ¡¢£¤¥¦§¨©ª«¬­®¯", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("°±²³´µ¶·¸¹º»¼½¾¿\"", MOSQ_ERR_MALFORMED_UTF8);
memset(buf, 0, sizeof(buf));
for(i=0x80; i<0x90; i++){
buf[i-0x80] = i;
}
utf8_helper(buf, MOSQ_ERR_MALFORMED_UTF8);
memset(buf, 0, sizeof(buf));
for(i=0x90; i<0xa0; i++){
buf[i-0x90] = i;
}
utf8_helper(buf, MOSQ_ERR_MALFORMED_UTF8);
for(i=0x80; i<0xA0; i++){
buf[0] = i;
buf[1] = 0;
utf8_helper(buf, MOSQ_ERR_MALFORMED_UTF8);
}
for(i=0xA0; i<0xC0; i++){
buf[0] = i;
buf[1] = 0;
utf8_helper(buf, MOSQ_ERR_MALFORMED_UTF8);
}
/* 3.2 Lonely start characters */
/* 3.2.1 All 32 first bytes of 2-byte sequences (0xc0-0xdf),
each followed by a space character: */
utf8_helper("\"À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß \"", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß ", MOSQ_ERR_MALFORMED_UTF8);
for(i=0xC0; i<0xE0; i++){
buf[0] = i;
buf[1] = ' ';
buf[2] = 0;
utf8_helper(buf, MOSQ_ERR_MALFORMED_UTF8);
}
/* 3.2.2 All 16 first bytes of 3-byte sequences (0xe0-0xef),
each followed by a space character: */
utf8_helper("\"à á â ã ä å æ ç è é ê ë ì í î ï \"", MOSQ_ERR_MALFORMED_UTF8);
for(i=0xe0; i<0xf0; i++){
buf[0] = i;
buf[1] = ' ';
buf[2] = 0;
utf8_helper(buf, MOSQ_ERR_MALFORMED_UTF8);
}
/* 3.2.3 All 8 first bytes of 4-byte sequences (0xf0-0xf7),
each followed by a space character: */
utf8_helper("\"ð ñ ò ó ô õ ö ÷ \"", MOSQ_ERR_MALFORMED_UTF8);
for(i=0xF0; i<0xF8; i++){
buf[0] = i;
buf[1] = ' ';
buf[2] = 0;
utf8_helper(buf, MOSQ_ERR_MALFORMED_UTF8);
}
/* 3.2.4 All 4 first bytes of 5-byte sequences (0xf8-0xfb),
each followed by a space character: */
utf8_helper("\"ø ù ú û \"", MOSQ_ERR_MALFORMED_UTF8);
for(i=0xF8; i<0xFC; i++){
buf[0] = i;
buf[1] = ' ';
buf[2] = 0;
utf8_helper(buf, MOSQ_ERR_MALFORMED_UTF8);
}
/* 3.2.5 All 2 first bytes of 6-byte sequences (0xfc-0xfd),
each followed by a space character: */
utf8_helper("\"ü ý \"", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ü ", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ý ", MOSQ_ERR_MALFORMED_UTF8);
for(i=0xFC; i<0xFE; i++){
buf[0] = i;
buf[1] = ' ';
buf[2] = 0;
utf8_helper(buf, MOSQ_ERR_MALFORMED_UTF8);
}
/* 3.3 Sequences with last continuation byte missing
@ -239,7 +291,6 @@ static void TEST_utf8_illegal_code_positions(void)
/* 5.2 Paired UTF-16 surrogates */
/* FIXME - these need splitting up into separate tests. */
utf8_helper("5.2.1 U+D800 U+DC00 = ed a0 80 ed b0 80 = \"𐀀\"", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("5.2.2 U+D800 U+DFFF = ed a0 80 ed bf bf = \"𐏿\"", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("5.2.3 U+DB7F U+DC00 = ed ad bf ed b0 80 = \"í­¿í°€\"", MOSQ_ERR_MALFORMED_UTF8);
@ -277,10 +328,73 @@ static void TEST_utf8_illegal_code_positions(void)
/* FIXME - these need splitting up into separate tests. */
utf8_helper("5.3.3 U+FDD0 .. U+FDEF = \"ï·<EFBFBD>ï·ï·ï·“﷔﷕ï·ï·—﷘﷙﷚ï·ï·œï·<EFBFBD>﷞﷟﷠﷡﷢﷣﷤﷥﷦﷧﷨﷩﷪﷫﷬﷭﷮﷯\"", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·<EFBFBD>", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·‘", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·’", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·“", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·”", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·•", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·–", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·—", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·˜", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·™", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·š", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·›", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("﷜", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·<EFBFBD>", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·ž", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·Ÿ", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï· ", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·¡", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·¢", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·£", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·¤", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·¥", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·¦", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·§", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·¨", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·©", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·ª", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·«", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·¬", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·­", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·®", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ï·¯", MOSQ_ERR_MALFORMED_UTF8);
/* 5.3.4 U+nFFFE U+nFFFF (for n = 1..10) */
utf8_helper("\"🿾🿿𯿾𯿿𿿾𿿿ñ<EFBFBD>¿¾ñ<EFBFBD>¿¿ñŸ¿¾ñŸ¿¿ñ¯¿¾ñ¯¿¿ñ¿¿¾ñ¿¿¿ò<EFBFBD>¿¾ò<EFBFBD>¿¿òŸ¿¾òŸ¿¿ò¯¿¾ò¯¿¿ò¿¿¾ò¿¿¿ó<EFBFBD>¿¾ó<EFBFBD>¿¿óŸ¿¾óŸ¿¿ó¯¿¾ó¯¿¿ó¿¿¾ó¿¿¿ô<EFBFBD>¿¾ô<EFBFBD>¿¿\"", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("🿾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("🿿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("𯿾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("𯿿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ð¿¿¾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ð¿¿¿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ñ<EFBFBD>¿¾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ñ<EFBFBD>¿¿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("񟿾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("񟿿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("񯿾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("񯿿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ñ¿¿¾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ñ¿¿¿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ò<EFBFBD>¿¾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ò<EFBFBD>¿¿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("򟿾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("òŸ¿¿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("򯿾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("򯿿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ò¿¿¾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ò¿¿¿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ó<EFBFBD>¿¾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ó<EFBFBD>¿¿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("󟿾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("óŸ¿¿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("󯿾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("󯿿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ó¿¿¾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ó¿¿¿", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ô<EFBFBD>¿¾", MOSQ_ERR_MALFORMED_UTF8);
utf8_helper("ô<EFBFBD>¿¿", MOSQ_ERR_MALFORMED_UTF8);
}

Loading…
Cancel
Save