From 40723a067e2216f643485b732f90202b38b59e4b Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Tue, 24 Jan 2017 10:51:38 +0100 Subject: prog: validate deserialized programs The optimization change removed validation too aggressively. We do need program validation during deserialization, because we can get bad programs from corpus or hub. Restore program validation after deserialization. --- prog/encoding.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'prog/encoding.go') diff --git a/prog/encoding.go b/prog/encoding.go index 274e94a2d..151ff1935 100644 --- a/prog/encoding.go +++ b/prog/encoding.go @@ -27,8 +27,10 @@ func (p *Prog) String() string { } func (p *Prog) Serialize() []byte { - if err := p.validate(); err != nil { - panic("serializing invalid program") + if debug { + if err := p.validate(); err != nil { + panic("serializing invalid program") + } } buf := new(bytes.Buffer) vars := make(map[*Arg]int) @@ -173,6 +175,9 @@ func Deserialize(data []byte) (prog *Prog, err error) { if err := p.Err(); err != nil { return nil, err } + // This validation is done even in non-debug mode because deserialization + // procedure does not catch all bugs (e.g. mismatched types). + // And we can receive bad programs from corpus and hub. if err := prog.validate(); err != nil { return nil, err } -- cgit mrf-deployment