From def91db3fe955168c82038ac2ee39783e81a2af0 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sat, 15 Dec 2018 15:17:13 +0100 Subject: prog, pkg/csource: more readable serialization for strings Always serialize strings in readable format (non-hex). Serialize binary data in readable format in more cases. Fixes #792 --- prog/encoding_test.go | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) (limited to 'prog/encoding_test.go') diff --git a/prog/encoding_test.go b/prog/encoding_test.go index ac670a8ab..f828123db 100644 --- a/prog/encoding_test.go +++ b/prog/encoding_test.go @@ -28,23 +28,25 @@ func setToArray(s map[string]struct{}) []string { func TestSerializeData(t *testing.T) { t.Parallel() r := rand.New(rand.NewSource(0)) - for i := 0; i < 1e4; i++ { - data := make([]byte, r.Intn(4)) - for i := range data { - data[i] = byte(r.Intn(256)) - } - buf := new(bytes.Buffer) - serializeData(buf, data) - p := newParser(nil, buf.Bytes(), true) - if !p.Scan() { - t.Fatalf("parser does not scan") - } - data1, err := p.deserializeData() - if err != nil { - t.Fatalf("failed to deserialize %q -> %s: %v", data, buf.Bytes(), err) - } - if !bytes.Equal(data, data1) { - t.Fatalf("corrupted data %q -> %s -> %q", data, buf.Bytes(), data1) + for _, readable := range []bool{false, true} { + for i := 0; i < 1e3; i++ { + data := make([]byte, r.Intn(4)) + for i := range data { + data[i] = byte(r.Intn(256)) + } + buf := new(bytes.Buffer) + serializeData(buf, data, readable) + p := newParser(nil, buf.Bytes(), true) + if !p.Scan() { + t.Fatalf("parser does not scan") + } + data1, err := p.deserializeData() + if err != nil { + t.Fatalf("failed to deserialize %q -> %s: %v", data, buf.Bytes(), err) + } + if !bytes.Equal(data, data1) { + t.Fatalf("corrupted data %q -> %s -> %q", data, buf.Bytes(), data1) + } } } } @@ -253,6 +255,18 @@ func TestDeserialize(t *testing.T) { input: `test$auto0(AUTO, &AUTO={AUTO, AUTO, AUTO}, AUTO, 0x0)`, err: regexp.MustCompile(`wrong type \*prog\.IntType for AUTO`), }, + { + input: `test$str0(&AUTO="303100090a0d7022273a")`, + output: `test$str0(&(0x7f0000000040)='01\x00\t\n\rp\"\':')`, + }, + { + input: `test$blob0(&AUTO="303100090a0d7022273a")`, + output: `test$blob0(&(0x7f0000000040)='01\x00\t\n\rp\"\':')`, + }, + { + input: `test$blob0(&AUTO="3031000a0d7022273a01")`, + output: `test$blob0(&(0x7f0000000040)="3031000a0d7022273a01")`, + }, } buf := make([]byte, ExecBufferSize) for _, test := range tests { -- cgit mrf-deployment