aboutsummaryrefslogtreecommitdiffstats
path: root/prog/validation.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-12-13 20:12:13 +0100
committerDmitry Vyukov <dvyukov@google.com>2017-12-17 11:39:14 +0100
commit8ef00507063baf3fa681bb53113cb33adda5e4d7 (patch)
tree90f5be39889c5e064c92f16d9649627e84933820 /prog/validation.go
parenteaeccee1d7f7a3f22e842309f21e3b118bd95254 (diff)
prog: don't serialize output data args
Fixes #188 We now will write just ""/1000 to denote a 1000-byte output buffer. Also we now don't store 1000-byte buffer in memory just to denote size. Old format is still parsed.
Diffstat (limited to 'prog/validation.go')
-rw-r--r--prog/validation.go16
1 files changed, 7 insertions, 9 deletions
diff --git a/prog/validation.go b/prog/validation.go
index e1f083b2a..d0f6d0bd2 100644
--- a/prog/validation.go
+++ b/prog/validation.go
@@ -68,10 +68,9 @@ func (c *Call) validate(ctx *validCtx) error {
return fmt.Errorf("syscall %v: output arg '%v'/'%v' has non default value '%+v'", c.Meta.Name, a.Type().FieldName(), a.Type().Name(), a)
}
case *DataArg:
- for _, v := range a.Data {
- if v != 0 {
- return fmt.Errorf("syscall %v: output arg '%v' has data", c.Meta.Name, a.Type().Name())
- }
+ if len(a.data) != 0 {
+ return fmt.Errorf("syscall %v: output arg '%v' has data",
+ c.Meta.Name, a.Type().Name())
}
}
}
@@ -123,9 +122,9 @@ func (c *Call) validate(ctx *validCtx) error {
case *DataArg:
switch typ1.Kind {
case BufferString:
- if typ1.TypeSize != 0 && uint64(len(a.Data)) != typ1.TypeSize {
+ if typ1.TypeSize != 0 && a.Size() != typ1.TypeSize {
return fmt.Errorf("syscall %v: string arg '%v' has size %v, which should be %v",
- c.Meta.Name, a.Type().Name(), len(a.Data), typ1.TypeSize)
+ c.Meta.Name, a.Type().Name(), a.Size(), typ1.TypeSize)
}
}
default:
@@ -178,10 +177,9 @@ func (c *Call) validate(ctx *validCtx) error {
}
case *DataArg:
typ1 := a.Type()
- if !typ1.Varlen() && typ1.Size() != uint64(len(a.Data)) {
+ if !typ1.Varlen() && typ1.Size() != a.Size() {
return fmt.Errorf("syscall %v: data arg %v has wrong size %v, want %v",
- c.Meta.Name, arg.Type().Name(),
- len(a.Data), typ1.Size())
+ c.Meta.Name, arg.Type().Name(), a.Size(), typ1.Size())
}
switch typ1 := a.Type().(type) {
case *ArrayType: