creating a fuzzing example using a calculator.
This commit is contained in:
parent
38eb2236ca
commit
ff85c05743
79
examples/fuzzing/calculator_fuzz.go
Normal file
79
examples/fuzzing/calculator_fuzz.go
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"math/rand"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Calculator(num1, num2 float64, operator string) (float64, error) {
|
||||||
|
var result float64
|
||||||
|
|
||||||
|
switch operator {
|
||||||
|
case "-":
|
||||||
|
result = num1 - num2
|
||||||
|
|
||||||
|
case "+":
|
||||||
|
result = num1 + num2
|
||||||
|
|
||||||
|
case "/":
|
||||||
|
if num2 == 0 || num1 == 0 {
|
||||||
|
return 0, errors.New("Division by 0")
|
||||||
|
}
|
||||||
|
case "*":
|
||||||
|
result = num1 * num2
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
The go-fuzz testing tools operates on raw binary data
|
||||||
|
Every input are in []bytes which are coverted to strings and
|
||||||
|
The string is then split into three parts (two numbers and an operator) using strings.
|
||||||
|
Split, and the numbers are parsed using strconv.ParseFloat. Finally,
|
||||||
|
the Calculator function is called with the parsed numbers and operator.
|
||||||
|
*/
|
||||||
|
func Fuzz(data []byte) float64 {
|
||||||
|
//converts input data into string
|
||||||
|
inputs := strings.Split(string(data), ",")
|
||||||
|
//parse input numbers and operators
|
||||||
|
num1, err := strconv.ParseFloat(inputs[0], 64)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
|
||||||
|
}
|
||||||
|
num2, err := strconv.ParseFloat(inputs[1], 64)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
operators := inputs[2]
|
||||||
|
_, err = Calculator(num1, num2, operators)
|
||||||
|
if err != nil {
|
||||||
|
if err.Error() != "Division by 0" {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//returns a success
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// Seed the random number generator
|
||||||
|
rand.Seed(1234)
|
||||||
|
|
||||||
|
// Generate random input data
|
||||||
|
data := make([]byte, 64)
|
||||||
|
rand.Read(data)
|
||||||
|
|
||||||
|
result, err := Calculator(16, 18, "*")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
fmt.Println(result)
|
||||||
|
|
||||||
|
// Fuzz the Calculator function with the generated input data
|
||||||
|
Fuzz(data)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user