FuzzParseInputDefinition performs fuzz testing on the input definition parser to discover edge cases and potential security vulnerabilities in input handling. The fuzzer validates that: 1. The parser never panics on any input 2. Valid input definitions are correctly parsed 3. Invalid or malformed i
(f *testing.F)
| 19 | // 5. Type conversions work correctly for all supported types |
| 20 | // 6. Default values of different types (string, bool, number) are preserved |
| 21 | func FuzzParseInputDefinition(f *testing.F) { |
| 22 | // Seed corpus with valid input definition configurations |
| 23 | |
| 24 | // String inputs |
| 25 | f.Add(`{"description":"String input","type":"string","default":"hello","required":true}`) |
| 26 | f.Add(`{"description":"Optional string","type":"string","required":false}`) |
| 27 | f.Add(`{"description":"No default","type":"string"}`) |
| 28 | f.Add(`{"type":"string","default":""}`) |
| 29 | |
| 30 | // Boolean inputs |
| 31 | f.Add(`{"description":"Boolean input","type":"boolean","default":true,"required":true}`) |
| 32 | f.Add(`{"description":"Boolean false","type":"boolean","default":false}`) |
| 33 | f.Add(`{"type":"boolean","default":true}`) |
| 34 | f.Add(`{"type":"boolean","default":false}`) |
| 35 | |
| 36 | // Number inputs |
| 37 | f.Add(`{"description":"Number input","type":"number","default":42,"required":true}`) |
| 38 | f.Add(`{"description":"Float input","type":"number","default":3.14}`) |
| 39 | f.Add(`{"type":"number","default":0}`) |
| 40 | f.Add(`{"type":"number","default":-100}`) |
| 41 | f.Add(`{"type":"number","default":999999}`) |
| 42 | |
| 43 | // Choice inputs |
| 44 | f.Add(`{"description":"Choice input","type":"choice","default":"staging","options":["dev","staging","prod"]}`) |
| 45 | f.Add(`{"type":"choice","options":["a","b","c"]}`) |
| 46 | f.Add(`{"type":"choice","default":"x","options":["x","y","z"]}`) |
| 47 | |
| 48 | // Environment inputs |
| 49 | f.Add(`{"description":"Environment input","type":"environment","required":false}`) |
| 50 | f.Add(`{"type":"environment"}`) |
| 51 | |
| 52 | // Edge cases - empty values |
| 53 | f.Add(`{}`) |
| 54 | f.Add(`{"description":""}`) |
| 55 | f.Add(`{"type":""}`) |
| 56 | |
| 57 | // Edge cases - missing fields |
| 58 | f.Add(`{"description":"Missing type"}`) |
| 59 | f.Add(`{"type":"string"}`) |
| 60 | f.Add(`{"default":"value"}`) |
| 61 | |
| 62 | // Edge cases - long strings |
| 63 | f.Add(`{"description":"` + strings.Repeat("a", 1000) + `","type":"string"}`) |
| 64 | f.Add(`{"type":"string","default":"` + strings.Repeat("x", 5000) + `"}`) |
| 65 | |
| 66 | // Edge cases - special characters |
| 67 | f.Add(`{"description":"Special chars: !@#$%^&*()","type":"string"}`) |
| 68 | f.Add(`{"type":"string","default":"value with \"quotes\""}`) |
| 69 | f.Add(`{"type":"string","default":"value with 'single quotes'"}`) |
| 70 | f.Add(`{"description":"Unicode: 测试 🚀 ✓","type":"string"}`) |
| 71 | |
| 72 | // Edge cases - numeric edge values |
| 73 | f.Add(`{"type":"number","default":0}`) |
| 74 | f.Add(`{"type":"number","default":-1}`) |
| 75 | f.Add(`{"type":"number","default":1.7976931348623157e+308}`) |
| 76 | f.Add(`{"type":"number","default":-1.7976931348623157e+308}`) |
| 77 | f.Add(`{"type":"number","default":0.000000000001}`) |
| 78 |
nothing calls this directly
no test coverage detected