typestar

Fuzzing en Go

Un objetivo de fuzz recibe entradas al azar hasta hallar una que rompa la propiedad.

func Reverse(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}

func FuzzReverse(f *testing.F) {
    f.Add("typestar")
    f.Add("")

    f.Fuzz(func(t *testing.T, input string) {
        once := Reverse(input)
        twice := Reverse(once)
        if twice != input {
            t.Errorf("round trip: %q -> %q -> %q", input, once, twice)
        }
        if utf8.ValidString(input) && !utf8.ValidString(once) {
            t.Errorf("reverse broke utf8 for %q", input)
        }
    })
}

Cómo funciona

  1. f.Add siembra el corpus con valores interesantes conocidos.
  2. f.Fuzz recibe argumentos generados de los tipos sembrados.
  3. Aserta una propiedad, no una salida específica.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
23
Caracteres a escribir
509
Tokens
168
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 92 segundos.

Escribe este fragmento

Paso 2 de 3 en Medir y generar; paso 9 de 13 en Pruebas.

← Anterior Siguiente →