user_fuzzer.go 781 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. //go:build gofuzz
  2. // +build gofuzz
  3. package user
  4. import (
  5. "io"
  6. "strings"
  7. )
  8. func IsDivisbleBy(n int, divisibleby int) bool {
  9. return (n % divisibleby) == 0
  10. }
  11. func FuzzUser(data []byte) int {
  12. if len(data) == 0 {
  13. return -1
  14. }
  15. if !IsDivisbleBy(len(data), 5) {
  16. return -1
  17. }
  18. var divided [][]byte
  19. chunkSize := len(data) / 5
  20. for i := 0; i < len(data); i += chunkSize {
  21. end := i + chunkSize
  22. divided = append(divided, data[i:end])
  23. }
  24. _, _ = ParsePasswdFilter(strings.NewReader(string(divided[0])), nil)
  25. var passwd, group io.Reader
  26. group = strings.NewReader(string(divided[1]))
  27. _, _ = GetAdditionalGroups([]string{string(divided[2])}, group)
  28. passwd = strings.NewReader(string(divided[3]))
  29. _, _ = GetExecUser(string(divided[4]), nil, passwd, group)
  30. return 1
  31. }