Przykład nieprawidłowego ciągu utf8?


Odpowiedzi:



51

W 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",
);

Z http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php#54805


4

, ̆ był szczególnie zły. Widzę to jako połączone na Ubuntu.

przecinek-breve


3

Koncepcję wzorców źle uformowanych sekwencji bajtów można uzyskać z tabeli prawidłowo utworzonych sekwencji bajtów. Zobacz „ Tabela 3-7. Dobrze uformowane sekwencje bajtów UTF-8 ” w standardzie 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

Oto przykłady wygenerowane z U + 24B62. Użyłem ich do zgłoszenia błędu: Bug # 65045 mb_convert_encoding psuje dobrze sformułowany znak

// 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"

Nadmierne uproszczenie zakresu końcowych bajtów ([0x80, 0xBF]) można zobaczyć w różnych bibliotekach.

// 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

-6

Fuzz Testing - generuje losową sekwencję oktetów. Najprawdopodobniej wcześniej niż później dostaniesz nielegalne sekwencje.


7
Nie ma nic gorszego niż posiadanie heisenbugów lub eisentestów. Testy przechodzą 10 razy, wydajesz produkt, test kończy się niepowodzeniem.
Eric Duminil

@EricDuminil słyszałeś kiedyś o srand ()?
shoosh

4
Słusznie. Czy mógłbyś wspomnieć o tym w odpowiedzi, abym mógł cofnąć swój głos przeciw?
Eric Duminil

2
Ach. Cóż, zawsze jest coś nowego do nauczenia się, dlatego przede wszystkim przychodzę do SO. Myślę, że twoja srand()rada to dobry pomysł, może pomóc innym tutaj.
Eric Duminil

Możemy bezpośrednio utworzyć niepoprawne ciągi, nie potrzebujemy losowości, aby spróbować je w końcu znaleźć, chociaż biblioteki przetwarzające ciągi (prawdopodobnie!) Skorzystałyby na fuzzowaniu na wszelki wypadek.
galva
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.