Bladeren bron

fix #274, unescape before base64 decode

Tao Wen 7 jaren geleden
bovenliggende
commit
37cc313d18
2 gewijzigde bestanden met toevoegingen van 5 en 7 verwijderingen
  1. 2 7
      reflect_native.go
  2. 3 0
      value_tests/slice_test.go

+ 2 - 7
reflect_native.go

@@ -416,16 +416,11 @@ func (codec *base64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
 	}
 	switch iter.WhatIsNext() {
 	case StringValue:
-		encoding := base64.StdEncoding
-		src := iter.SkipAndReturnBytes()
-		src = src[1 : len(src)-1]
-		decodedLen := encoding.DecodedLen(len(src))
-		dst := make([]byte, decodedLen)
-		len, err := encoding.Decode(dst, src)
+		src := iter.ReadString()
+		dst, err := base64.StdEncoding.DecodeString(src)
 		if err != nil {
 			iter.ReportError("decode base64", err.Error())
 		} else {
-			dst = dst[:len]
 			codec.sliceType.UnsafeSet(ptr, unsafe.Pointer(&dst))
 		}
 	case ArrayValue:

+ 3 - 0
value_tests/slice_test.go

@@ -20,5 +20,8 @@ func init() {
 	}, unmarshalCase{
 		ptr:   (*[]byte)(nil),
 		input: `"aGVsbG8="`,
+	}, unmarshalCase{
+		ptr:   (*[]byte)(nil),
+		input: `"c3ViamVjdHM\/X2Q9MQ=="`,
 	})
 }