diff --git a/test/unit/utf8.c b/test/unit/utf8.c index a96ebaea..09f1a1a4 100644 --- a/test/unit/utf8.c +++ b/test/unit/utf8.c @@ -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("", MOSQ_ERR_MALFORMED_UTF8); - utf8_helper("", 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 = \"﷐﷑﷒﷓﷔﷕﷖﷗﷘﷙﷚﷛﷜﷝﷞﷟﷠﷡﷢﷣﷤﷥﷦﷧﷨﷩﷪﷫﷬﷭﷮﷯\"", 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); + 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("\"🿾🿿𯿾𯿿𿿾𿿿񏿾񏿿񟿾񟿿񯿾񯿿񿿾񿿿򏿾򏿿򟿾򟿿򯿾򯿿򿿾򿿿󏿾󏿿󟿾󟿿󯿾󯿿󿿾󿿿􏿾􏿿\"", 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); + 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); }