@@ -4,6 +4,7 @@ package kfuzztest
4
4
5
5
import (
6
6
"fmt"
7
+ "regexp"
7
8
"strings"
8
9
9
10
"github.com/google/syzkaller/pkg/ast"
@@ -63,6 +64,8 @@ func (b *Builder) EmitSyzlangDescription() (string, error) {
63
64
}
64
65
}
65
66
67
+ fmt .Println (descBuilder .String ())
68
+
66
69
// Format the output syzlang descriptions.
67
70
var astError error
68
71
eh := func (pos ast.Pos , msg string ) {
@@ -163,6 +166,15 @@ func syzConstraintToSyzlang(c SyzConstraint) string {
163
166
}
164
167
}
165
168
169
+ func isArray (typeName string ) (bool , string ) {
170
+ re := regexp .MustCompile (`^\[(\d+)\]([a-zA-Z]+)$` )
171
+ matches := re .FindStringSubmatch (typeName )
172
+ if len (matches ) == 0 {
173
+ return false , ""
174
+ }
175
+ return true , fmt .Sprintf ("array[%s, %s]" , dwarfToSyzlangType (matches [2 ]), matches [1 ])
176
+ }
177
+
166
178
func dwarfToSyzlangType (typeName string ) string {
167
179
if after , ok := strings .CutPrefix (typeName , "struct " ); ok {
168
180
return after
@@ -174,18 +186,23 @@ func dwarfToSyzlangType(typeName string) string {
174
186
return fmt .Sprintf ("ptr[inout, %s]" , after )
175
187
}
176
188
189
+ isArr , arr := isArray (typeName )
190
+ if isArr {
191
+ return arr
192
+ }
193
+
177
194
switch typeName {
178
- case "long unsigned int" , "size_t" :
195
+ case "long unsigned int" , "long int" , " size_t" :
179
196
return "int64"
180
- case "int" :
197
+ case "int" , "unsigned int" :
181
198
return "int32"
182
199
case "char" :
183
200
return "int8"
184
201
case "__u16" :
185
202
return "int16"
186
203
case "*const char" , "*const void" , "*const unsigned char" :
187
204
return "ptr[in, array[int8]]" // const pointers are read-only
188
- case "*char" :
205
+ case "*char" , "*void" :
189
206
return "ptr[inout, array[int8]]"
190
207
default :
191
208
return typeName
0 commit comments