mirror of
https://blitiri.com.ar/repos/chasquid
synced 2025-12-18 14:47:03 +00:00
aliases: Fuzz testing
This commit is contained in:
@@ -56,6 +56,7 @@ package aliases
|
|||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
@@ -269,9 +270,17 @@ func parseFile(domain, path string) (map[string][]Recipient, error) {
|
|||||||
}
|
}
|
||||||
defer f.Close()
|
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{}
|
aliases := map[string][]Recipient{}
|
||||||
|
|
||||||
scanner := bufio.NewScanner(f)
|
scanner := bufio.NewScanner(r)
|
||||||
for i := 1; scanner.Scan(); i++ {
|
for i := 1; scanner.Scan(); i++ {
|
||||||
line := strings.TrimSpace(scanner.Text())
|
line := strings.TrimSpace(scanner.Text())
|
||||||
if strings.HasPrefix(line, "#") {
|
if strings.HasPrefix(line, "#") {
|
||||||
@@ -317,11 +326,8 @@ func parseFile(domain, path string) (map[string][]Recipient, error) {
|
|||||||
aliases[addr] = rs
|
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,
|
// 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