gif画像をFuzzingして確認したクラッシュケース
gif画像をFuzzingして確認したクラッシュケース 下記のコードを見てほしい。 package main import ( "bytes" "fmt" "image/gif" "reflect" ) func main() { img, err := gif.DecodeAll(bytes.NewReader([]byte("GIF89a0\x0000000!\xf9\x04\xf9000\x00,0\x000\x00\x00\x000\x00\x80000000\x02\x00;"))) if err != nil { panic(err) } w := new(bytes.Buffer) err = gif.EncodeAll(w, img) if err != nil { panic(err) } img1, err := gif.DecodeAll(w) if err != nil { panic(err) } img1.Disposal = img.Disposal if !reflect.DeepEqual(img, img1) { fmt.Printf("gif0: %#v\n", img) fmt.Printf("gif1: %#v\n", img1) panic("gif changed") } } gif画像をEncodeしてDecodeしてreflect.DeepEqualで内容が一致しているか確認しているコードだ。 一見すると内容は一致してそうだし、特にpanic等に入らずそのまま終了しそうなコードだ。 では結果を見てみよう。...