aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/ipc
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2022-11-22 12:10:18 +0100
committerDmitry Vyukov <dvyukov@google.com>2022-11-23 09:09:39 +0100
commitf46b2272283056876fb9df794e3c67d3a2c3c059 (patch)
tree3e6574e80ea6d8b11142627835a740074ec3449e /pkg/ipc
parent1c50689b39eb028d91a28951b8300b7970a2aca5 (diff)
executor: add test for zlib decompression
Diffstat (limited to 'pkg/ipc')
-rw-r--r--pkg/ipc/ipc_test.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/pkg/ipc/ipc_test.go b/pkg/ipc/ipc_test.go
index 0734fbe6e..c1d3af69a 100644
--- a/pkg/ipc/ipc_test.go
+++ b/pkg/ipc/ipc_test.go
@@ -188,3 +188,41 @@ func TestParallel(t *testing.T) {
}
}
}
+
+func TestZlib(t *testing.T) {
+ t.Parallel()
+ target, err := prog.GetTarget(targets.TestOS, targets.TestArch64)
+ if err != nil {
+ t.Fatal(err)
+ }
+ cfg, opts, err := ipcconfig.Default(target)
+ if err != nil {
+ t.Fatal(err)
+ }
+ cfg.Flags |= FlagDebug
+ cfg.Executor = buildExecutor(t, target)
+ defer os.Remove(cfg.Executor)
+ env, err := MakeEnv(cfg, 0)
+ if err != nil {
+ t.Fatalf("failed to create env: %v", err)
+ }
+ defer env.Close()
+ r := rand.New(testutil.RandSource(t))
+ for i := 0; i < 10; i++ {
+ data := testutil.RandMountImage(r)
+ compressed := prog.Compress(data)
+ text := fmt.Sprintf(`syz_compare_zlib(&(0x7f0000000000)="$%s", AUTO, &(0x7f0000800000)="$%s", AUTO)`,
+ prog.EncodeB64(data), prog.EncodeB64(compressed))
+ p, err := target.Deserialize([]byte(text), prog.Strict)
+ if err != nil {
+ t.Fatalf("failed to deserialize empty program: %v", err)
+ }
+ output, info, _, err := env.Exec(opts, p)
+ if err != nil {
+ t.Fatalf("failed to run executor: %v", err)
+ }
+ if info.Calls[0].Errno != 0 {
+ t.Fatalf("data comparison failed: %v\n%s", info.Calls[0].Errno, output)
+ }
+ }
+}