Add fuzz testing for Section encoding/decoding with multiple edge cases
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/admin-else/strom/data"
|
||||
"github.com/admin-else/strom/util"
|
||||
)
|
||||
|
||||
var ToDoError = errors.New("to do")
|
||||
@@ -126,11 +127,11 @@ func (g *Generator) VisitNameAndData(tName string, tData any) (e ast.Expr, err e
|
||||
}
|
||||
t, found := g.Protocol.Types.Types[tName]
|
||||
if t != "native" && found {
|
||||
return Ident(CamelCase(tName)), nil
|
||||
return Ident(util.CamelCase(tName)), nil
|
||||
}
|
||||
t, found = g.CurrentlyGeneratingTypes.Types[tName]
|
||||
if found {
|
||||
return Ident(g.CurrentlyGeneratingTypesPrefix + CamelCase(tName)), nil
|
||||
return Ident(g.CurrentlyGeneratingTypesPrefix + util.CamelCase(tName)), nil
|
||||
}
|
||||
err = fmt.Errorf("unknown type %s", tName)
|
||||
return
|
||||
@@ -212,7 +213,7 @@ func (g *Generator) GenerateTypes(prefix string, types Types) (err error) {
|
||||
continue
|
||||
}
|
||||
|
||||
tName := prefix + CamelCase(k)
|
||||
tName := prefix + util.CamelCase(k)
|
||||
g.CurrentlyGeneratingTypeName = tName
|
||||
|
||||
e, retExpr := FixPointerReceivers(e)
|
||||
@@ -293,7 +294,7 @@ func (g *Generator) GenerateProtocol(protocol Protocol, version string) (err err
|
||||
v := typeData.([]any)[1].([]any)[1].(map[string]any)["type"].([]any)[1].(map[string]any)["fields"].(map[string]any)
|
||||
for _, k2 := range OrderedKeys(v) {
|
||||
v2 := v[k2].(string)
|
||||
typeName := prefix + CamelCase(v2)
|
||||
typeName := prefix + util.CamelCase(v2)
|
||||
g.packetInfos = append(g.packetInfos, PacketInfo{
|
||||
PacketDef: v2,
|
||||
TName: typeName,
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/admin-else/strom/proto_generator/protodef"
|
||||
"github.com/admin-else/strom/util"
|
||||
"github.com/go-viper/mapstructure/v2"
|
||||
)
|
||||
|
||||
@@ -52,7 +53,7 @@ func ContainerCompareTo(g *Generator, parts []string, inExpr ast.Expr, dataRaw a
|
||||
}
|
||||
for _, field := range data {
|
||||
if field.Name == name {
|
||||
return g.VisitCompareTo(parts, SelectorExprAndStr(inExpr, CamelCase(field.Name)), field.Type)
|
||||
return g.VisitCompareTo(parts, SelectorExprAndStr(inExpr, util.CamelCase(field.Name)), field.Type)
|
||||
}
|
||||
}
|
||||
err = errors.New("field not found")
|
||||
@@ -87,7 +88,7 @@ func BitfieldCompareTo(_ *Generator, parts []string, inExpr ast.Expr, dataRaw an
|
||||
cet = CaseExprTypeOnlyNumber
|
||||
}
|
||||
|
||||
e = SelectorExprAndStr(inExpr, CamelCase(fieldName))
|
||||
e = SelectorExprAndStr(inExpr, util.CamelCase(fieldName))
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"strconv"
|
||||
|
||||
"github.com/admin-else/strom/proto_generator/protodef"
|
||||
"github.com/admin-else/strom/util"
|
||||
"github.com/go-viper/mapstructure/v2"
|
||||
)
|
||||
|
||||
@@ -46,7 +47,7 @@ func ContainerDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string)
|
||||
|
||||
for _, field := range data {
|
||||
var statements []ast.Stmt
|
||||
cName := CamelCase(field.Name)
|
||||
cName := util.CamelCase(field.Name)
|
||||
if field.Anon {
|
||||
cName = "Anon"
|
||||
}
|
||||
@@ -106,7 +107,7 @@ func OptionDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s
|
||||
|
||||
func ArrayDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s []ast.Stmt, err error) {
|
||||
var data protodef.Array
|
||||
lName := "l" + CamelCase(name)
|
||||
lName := "l" + util.CamelCase(name)
|
||||
err = mapstructure.Decode(dataRaw, &data)
|
||||
if err != nil {
|
||||
return
|
||||
@@ -259,7 +260,7 @@ func SwitchDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
tName := name + CamelCase(fName) + "Tmp"
|
||||
tName := name + util.CamelCase(fName) + "Tmp"
|
||||
s1 := VarStmt(tName, tType)
|
||||
s3 := Assign121(varToSet, Ident(tName))
|
||||
var caseDecodeValueStmts []ast.Stmt
|
||||
@@ -309,7 +310,7 @@ func MapperDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
kName := CamelCase(name) + "Key"
|
||||
kName := util.CamelCase(name) + "Key"
|
||||
kType, err := g.VisitType(data.Type)
|
||||
if err != nil {
|
||||
return
|
||||
@@ -346,7 +347,7 @@ func BufferDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s
|
||||
// rawString, err := io.ReadAll(io.LimitReader(r, int64(l)))
|
||||
|
||||
if data.CountType != nil {
|
||||
lName := "l" + CamelCase(name)
|
||||
lName := "l" + util.CamelCase(name)
|
||||
var countType ast.Expr
|
||||
countType, err = g.VisitType(data.CountType)
|
||||
if err != nil {
|
||||
@@ -411,7 +412,7 @@ func BitFieldDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string)
|
||||
}
|
||||
|
||||
rShiftBy := totalSize - field.Size
|
||||
fieldToSet := SelectorExprAndStr(varToSet, CamelCase(field.Name))
|
||||
fieldToSet := SelectorExprAndStr(varToSet, util.CamelCase(field.Name))
|
||||
|
||||
var getDataExpr ast.Expr
|
||||
getDataExpr = RightShift(
|
||||
@@ -470,7 +471,7 @@ func RegistryEntryHolderSetDecoder(g *Generator, varToSet ast.Expr, dataRaw any,
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
lName := "l" + CamelCase(name)
|
||||
lName := "l" + util.CamelCase(name)
|
||||
s1 := VarStmt(lName, countType)
|
||||
s2, err := g.VisitDecoder(Ident(lName), "varint", name)
|
||||
if err != nil {
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"strconv"
|
||||
|
||||
"github.com/admin-else/strom/proto_generator/protodef"
|
||||
"github.com/admin-else/strom/util"
|
||||
"github.com/go-viper/mapstructure/v2"
|
||||
)
|
||||
|
||||
@@ -37,11 +38,11 @@ func ContainerEncoder(g *Generator, varToSet ast.Expr, dataRaw any, name string)
|
||||
|
||||
for _, field := range data {
|
||||
var statements []ast.Stmt
|
||||
cName := CamelCase(field.Name)
|
||||
cName := util.CamelCase(field.Name)
|
||||
if field.Anon {
|
||||
cName = "Anon"
|
||||
}
|
||||
statements, err = g.VisitEncoder(SelectorExprAndStr(varToSet, cName), field.Type, name+CamelCase(cName))
|
||||
statements, err = g.VisitEncoder(SelectorExprAndStr(varToSet, cName), field.Type, name+util.CamelCase(cName))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -170,7 +171,7 @@ func BitFieldEncoder(g *Generator, varToSet ast.Expr, dataRaw any, name string)
|
||||
Ident(boolFix),
|
||||
SelectorExprAndStr(
|
||||
varToSet,
|
||||
CamelCase(field.Name),
|
||||
util.CamelCase(field.Name),
|
||||
),
|
||||
),
|
||||
NumLitHex((1<<field.Size)-1),
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"go/ast"
|
||||
|
||||
"github.com/admin-else/strom/proto_generator/protodef"
|
||||
"github.com/admin-else/strom/util"
|
||||
"github.com/go-viper/mapstructure/v2"
|
||||
)
|
||||
|
||||
@@ -36,7 +37,7 @@ func VisitContainerType(g *Generator, dataRaw any) (ast.Expr, error) {
|
||||
if field.Anon {
|
||||
field.Name = "Anon" // lol
|
||||
}
|
||||
AddFieldToStruct(s, CamelCase(field.Name), t)
|
||||
AddFieldToStruct(s, util.CamelCase(field.Name), t)
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
@@ -137,7 +138,7 @@ func VisitBitFieldType(g *Generator, dataRaw any) (e ast.Expr, err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
AddFieldToStruct(ret, CamelCase(field.Name), fieldType)
|
||||
AddFieldToStruct(ret, util.CamelCase(field.Name), fieldType)
|
||||
}
|
||||
e = ret
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user