From fd2c8134ce5bed6b37ab8f545c73d5509113db57 Mon Sep 17 00:00:00 2001 From: jmank88 Date: Fri, 16 Aug 2019 08:27:35 -0500 Subject: [PATCH] support empty string; update CI test versions --- .travis.yml | 4 ++-- reader.go | 16 ++++++++++------ ubjson_test.go | 1 + 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index d52579c..c320ba6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: go go: - - 1.9.x - - "1.10" + - 1.11.x + - 1.12.x - tip install: diff --git a/reader.go b/reader.go index e8caa24..30b774d 100644 --- a/reader.go +++ b/reader.go @@ -211,10 +211,12 @@ func (r *binaryReader) readString(max int) (string, error) { if err != nil { return "", errors.Wrap(err, "failed to read string length prefix") } - if l < 1 { + switch { + case l == 0: + return "", nil + case l < 0: return "", errors.Errorf("illegal string length prefix: %d", l) - } - if l > max { + case l > max: return "", errors.Errorf("string length prefix exceeds max allocation limit of %d: %d", max, l) } b := make([]byte, l) @@ -376,10 +378,12 @@ func (r *blockReader) readString(max int) (string, error) { if err != nil { return "", errors.Wrap(err, "failed to read string length prefix") } - if l < 1 { + switch { + case l == 0: + return "", nil + case l < 0: return "", errors.Errorf("illegal string length prefix: %d", l) - } - if l > max { + case l > max: return "", errors.Errorf("string length prefix exceeds max allocation limit of %d: %d", max, l) } s, err := r.nextBlock() diff --git a/ubjson_test.go b/ubjson_test.go index a926946..143c694 100644 --- a/ubjson_test.go +++ b/ubjson_test.go @@ -82,6 +82,7 @@ var cases = map[string]testCase{ "C=a": {Char('a'), []byte{'C', 0x61}, "[C][a]"}, "string=string": {"string", append([]byte{'S', 0x55, 0x06}, "string"...), "[S][U][6][string]"}, + "string=empty": {"", []byte{'S', 0x55, 0x00}, "[S][U][0]"}, "Array-empty": {[0]int{}, []byte{0x5b, 0x23, 0x55, 0x0}, "[[][#][U][0]"},