diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-12-09 17:08:14 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-12-10 16:37:01 +0100 |
| commit | 95fe19c19e596446412626b048d950de6ce8c886 (patch) | |
| tree | 4dc35d5dc26acf7a3fa78eafdda07bbd283b2bcc /prog/prog_test.go | |
| parent | a5efea3ec3e302da3fa01ca44604fe62aec49a79 (diff) | |
prog: introduce strict parsing mode
Over time we relaxed parsing to handle all kinds of invalid programs
(excessive/missing args, wrong types, etc).
This is useful when reading old programs from corpus.
But this is harmful for e.g. reading test inputs as they can become arbitrary outdated.
For runtests which creates additional problem of executing not
what is actually written in the test (or at least what author meant).
Add strict parsing mode that does not tolerate any errors.
For now it just checks excessive syscall arguments.
Diffstat (limited to 'prog/prog_test.go')
| -rw-r--r-- | prog/prog_test.go | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/prog/prog_test.go b/prog/prog_test.go index 9363754d1..1edb7690b 100644 --- a/prog/prog_test.go +++ b/prog/prog_test.go @@ -37,7 +37,7 @@ func TestDefaultCallArgs(t *testing.T) { for _, meta := range target.SyscallMap { // Ensure that we can restore all arguments of all calls. prog := fmt.Sprintf("%v()", meta.Name) - p, err := target.Deserialize([]byte(prog)) + p, err := target.Deserialize([]byte(prog), Strict) if err != nil { t.Fatalf("failed to restore default args in prog %q: %v", prog, err) } @@ -52,7 +52,7 @@ func TestSerialize(t *testing.T) { for i := 0; i < iters; i++ { p := target.Generate(rs, 10, nil) data := p.Serialize() - p1, err := target.Deserialize(data) + p1, err := target.Deserialize(data, Strict) if err != nil { t.Fatalf("failed to deserialize program: %v\n%s", err, data) } @@ -154,7 +154,7 @@ func testCrossTarget(t *testing.T, target *Target, crossTargets []*Target) { for i := 0; i < iters; i++ { p := target.Generate(rs, 20, nil) testCrossArchProg(t, p, crossTargets) - p, err := target.Deserialize(p.Serialize()) + p, err := target.Deserialize(p.Serialize(), Strict) if err != nil { t.Fatal(err) } @@ -171,7 +171,7 @@ func testCrossTarget(t *testing.T, target *Target, crossTargets []*Target) { func testCrossArchProg(t *testing.T, p *Prog, crossTargets []*Target) { serialized := p.Serialize() for _, crossTarget := range crossTargets { - _, err := crossTarget.Deserialize(serialized) + _, err := crossTarget.Deserialize(serialized, Strict) if err == nil || strings.Contains(err.Error(), "unknown syscall") { continue } @@ -358,7 +358,7 @@ fallback$0() } for i, test := range tests { t.Run(fmt.Sprint(i), func(t *testing.T) { - p, err := target.Deserialize([]byte(test.prog)) + p, err := target.Deserialize([]byte(test.prog), Strict) if err != nil { t.Fatal(err) } |
