Örnek geçersiz utf8 dizesi?


Yanıtlar:



53

PHP'de:

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

Gönderen http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php#54805


4

, ̆ özellikle kötüydü. Bunu ubuntu'da birleştirilmiş olarak görüyorum.

virgül kısaltması


4

Kötü biçimlendirilmiş bayt dizilerinin örüntüleri fikri, iyi biçimlendirilmiş bayt dizileri tablosundan elde edilebilir. Unicode Standard 6.2'deki " Tablo 3-7. İyi Biçimlendirilmiş UTF-8 Bayt Dizilerine " bakın.

    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

İşte U + 24B62'den üretilen örnekler. Bunları bir hata raporu için kullandım: Hata # 65045 mb_convert_encoding iyi biçimlendirilmiş karakteri bozuyor

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

Sondaki bayt aralığının ([0x80, 0xBF]) aşırı basitleştirilmesi çeşitli kitaplıklarda görülebilir.

// 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 - rastgele bir sekizli dizisi oluşturun. Büyük olasılıkla daha erken yasadışı diziler alacaksınız.


7
Heisenbugs veya eisentest yapmaktan daha kötü bir şey olamaz. Testler 10 kez geçer, ürünü serbest bırakırsınız, test başarısız olur.
Eric Duminil

@EricDuminil hiç srand () duydun mu?
shoosh

4
Yeterince adil. Olumsuz oyumu geri alabilmem için lütfen yanıtta bundan bahsedebilir misiniz?
Eric Duminil

2
Ah ah. Her zaman öğrenecek yeni bir şeyler vardır, bu yüzden ilk olarak SO'ya geliyorum. Bence srand()tavsiyeniz iyi bir fikir, buradaki diğer insanlara yardımcı olabilir.
Eric Duminil

Geçersiz dizgeleri doğrudan oluşturabiliriz, onları denemek ve sonunda bulmak için rastgeleliğe ihtiyacımız yoktur, ancak dizgi işleme kütüphaneleri her ihtimale karşı fuzzingden fayda sağlayacaktır (muhtemelen!).
galva
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.