mirror of
https://blitiri.com.ar/repos/chasquid
synced 2025-12-17 14:37:02 +00:00
aliases: Fuzz testing
This commit is contained in:
@@ -56,6 +56,7 @@ package aliases
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
@@ -269,9 +270,17 @@ func parseFile(domain, path string) (map[string][]Recipient, error) {
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
aliases, err := parseReader(domain, f)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("reading %q: %v", path, err)
|
||||
}
|
||||
return aliases, nil
|
||||
}
|
||||
|
||||
func parseReader(domain string, r io.Reader) (map[string][]Recipient, error) {
|
||||
aliases := map[string][]Recipient{}
|
||||
|
||||
scanner := bufio.NewScanner(f)
|
||||
scanner := bufio.NewScanner(r)
|
||||
for i := 1; scanner.Scan(); i++ {
|
||||
line := strings.TrimSpace(scanner.Text())
|
||||
if strings.HasPrefix(line, "#") {
|
||||
@@ -317,11 +326,8 @@ func parseFile(domain, path string) (map[string][]Recipient, error) {
|
||||
aliases[addr] = rs
|
||||
}
|
||||
}
|
||||
if err := scanner.Err(); err != nil {
|
||||
return nil, fmt.Errorf("reading %q: %v", path, err)
|
||||
}
|
||||
|
||||
return aliases, nil
|
||||
return aliases, scanner.Err()
|
||||
}
|
||||
|
||||
// removeAllAfter removes everything from s that comes after the separators,
|
||||
|
||||
22
internal/aliases/fuzz.go
Normal file
22
internal/aliases/fuzz.go
Normal file
@@ -0,0 +1,22 @@
|
||||
// Fuzz testing for package aliases.
|
||||
|
||||
// +build gofuzz
|
||||
|
||||
package aliases
|
||||
|
||||
import "bytes"
|
||||
|
||||
func Fuzz(data []byte) int {
|
||||
interesting := 0
|
||||
aliases, _ := parseReader("domain", bytes.NewReader(data))
|
||||
|
||||
// Mark cases with actual aliases as more interesting.
|
||||
for _, rcpts := range aliases {
|
||||
if len(rcpts) > 0 {
|
||||
interesting = 1
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return interesting
|
||||
}
|
||||
0
internal/aliases/testdata/fuzz/corpus/t-001
vendored
Normal file
0
internal/aliases/testdata/fuzz/corpus/t-001
vendored
Normal file
14
internal/aliases/testdata/fuzz/corpus/t-002
vendored
Normal file
14
internal/aliases/testdata/fuzz/corpus/t-002
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
# First some valid cases.
|
||||
a: b
|
||||
c: d@e, f,
|
||||
x: | command
|
||||
|
||||
# The following is invalid, should be ignored.
|
||||
a@dom: x@dom
|
||||
|
||||
# Overrides.
|
||||
o1: a
|
||||
o1: b
|
||||
|
||||
# Finally one to make the file NOT end in \n:
|
||||
y: z
|
||||
12
internal/aliases/testdata/fuzz/corpus/t-003
vendored
Normal file
12
internal/aliases/testdata/fuzz/corpus/t-003
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
# Easy aliases.
|
||||
pepe: jose
|
||||
joan: juan
|
||||
|
||||
# UTF-8 aliases.
|
||||
pitanga: ñangapirí
|
||||
añil: azul, índigo
|
||||
|
||||
# Pipe aliases.
|
||||
tubo: | writemailto ../.data/pipe_alias_worked
|
||||
|
||||
3
internal/aliases/testdata/fuzz/corpus/t-004
vendored
Normal file
3
internal/aliases/testdata/fuzz/corpus/t-004
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
|
||||
fail: | false
|
||||
|
||||
2
internal/aliases/testdata/fuzz/corpus/t-005
vendored
Normal file
2
internal/aliases/testdata/fuzz/corpus/t-005
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
aliasA: aliasB@srv-B
|
||||
Reference in New Issue
Block a user