unit-testing - framework - jquery sizzle
Ejemplo de cadena utf8 no válida? (5)
, ̆ fue particularmente malvado. Lo veo combinado en ubuntu.
comma-breve
Estoy probando cómo algunos de mis códigos manejan datos incorrectos, y necesito algunas series de bytes que son inválidos UTF-8.
¿Puedes publicar algo, e idealmente, una explicación de por qué son malos / dónde los obtuviste?
Eche un vistazo a la capacidad del descodificador UTF-8 de Markus Kuhn y al archivo de prueba de esfuerzo
Encontrará ejemplos de muchas irregularidades UTF-8, incluidos bytes de inicio solos, bytes de continuación faltantes, secuencias demasiado largas, etc.
En PHP:
$examples = array(
''Valid ASCII'' => "a",
''Valid 2 Octet Sequence'' => "/xc3/xb1",
''Invalid 2 Octet Sequence'' => "/xc3/x28",
''Invalid Sequence Identifier'' => "/xa0/xa1",
''Valid 3 Octet Sequence'' => "/xe2/x82/xa1",
''Invalid 3 Octet Sequence (in 2nd Octet)'' => "/xe2/x28/xa1",
''Invalid 3 Octet Sequence (in 3rd Octet)'' => "/xe2/x82/x28",
''Valid 4 Octet Sequence'' => "/xf0/x90/x8c/xbc",
''Invalid 4 Octet Sequence (in 2nd Octet)'' => "/xf0/x28/x8c/xbc",
''Invalid 4 Octet Sequence (in 3rd Octet)'' => "/xf0/x90/x28/xbc",
''Invalid 4 Octet Sequence (in 4th Octet)'' => "/xf0/x28/x8c/x28",
''Valid 5 Octet Sequence (but not Unicode!)'' => "/xf8/xa1/xa1/xa1/xa1",
''Valid 6 Octet Sequence (but not Unicode!)'' => "/xfc/xa1/xa1/xa1/xa1/xa1",
);
De http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php#54805
Fuzz Testing: genera una secuencia aleatoria de octetos. Lo más probable es que obtenga algunas secuencias ilegales más temprano que tarde.
La idea de patrones de secuencias de bytes mal formadas puede obtenerse de la tabla de secuencias de bytes bien formadas. Consulte " Tabla 3-7. Secuencias de bytes UTF-8 bien formadas " en el estándar Unicode 6.2.
Code Points First Byte Second Byte Third Byte Fourth Byte
U+0000 - U+007F 00 - 7F
U+0080 - U+07FF C2 - DF 80 - BF
U+0800 - U+0FFF E0 A0 - BF 80 - BF
U+1000 - U+CFFF E1 - EC 80 - BF 80 - BF
U+D000 - U+D7FF ED 80 - 9F 80 - BF
U+E000 - U+FFFF EE - EF 80 - BF 80 - BF
U+10000 - U+3FFFF F0 90 - BF 80 - BF 80 - BF
U+40000 - U+FFFFF F1 - F3 80 - BF 80 - BF 80 - BF
U+100000 - U+10FFFF F4 80 - 8F 80 - BF 80 - BF
Estos son los ejemplos generados a partir de U + 24B62. Los usé para un informe de error: el error # 65045 mb_convert_encoding rompe el personaje bien formado
// U+24B62: "/xF0/xA4/xAD/xA2"
"/xF0/xA4/xAD" ."/xF0/xA4/xAD/xA2"."/xF0/xA4/xAD/xA2"
"/xF0/xA4/xAD/xA2"."/xF0/xA4/xAD/xA2"."/xF0/xA4/xAD"
La simplificación excesiva del rango de bytes finales ([0x80, 0xBF]) se puede ver en las distintas bibliotecas.
// U+0800 - U+0FFF
/xE0/x80/x80
// U+D000 - U+D7FF
/xED/xBF/xBF
// U+10000 - U+3FFFF
/xF0/x80/x80/x80
// U+100000 - U+10FFFF
/xF4/xBF/xBF/xBF