From 1c8e10bcebe7f39ca238a5dfbd1bd92c9faa39b8 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Tue, 22 Nov 2022 10:37:05 +0000 Subject: prog: handle broken base64 strings Currently it can fail if there's never a closing quote. Add a test to verify this behavior. --- prog/encoding.go | 4 ++-- prog/encoding_test.go | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'prog') diff --git a/prog/encoding.go b/prog/encoding.go index 33983fb47..5c4be432e 100644 --- a/prog/encoding.go +++ b/prog/encoding.go @@ -978,15 +978,15 @@ func (p *parser) deserializeData() ([]byte, bool, error) { // Read Base64 data. p.consume() var rawData []byte - for p.Char() != '"' { + for !p.EOF() && p.Char() != '"' { v := p.consume() rawData = append(rawData, v) } + p.Parse('"') decoded, err := DecodeB64(rawData) if err != nil { return nil, false, fmt.Errorf("data arg is corrupt: %v", err) } - p.Parse('"') return decoded, true, nil } val := "" diff --git a/prog/encoding_test.go b/prog/encoding_test.go index 4cb836922..73c2cabcc 100644 --- a/prog/encoding_test.go +++ b/prog/encoding_test.go @@ -331,6 +331,10 @@ func TestDeserialize(t *testing.T) { In: `test$opt2(0x0) (fail_nth: 0)`, Out: `test$opt2(0x0)`, }, + { + In: `test$str2(&(0x7f0000000000)="$eJwqrqzKTszJSS0CBAAA//8TyQPi`, + Err: `want ", got EOF`, + }, }) } -- cgit mrf-deployment