Skip to content

Commit

Permalink
[fix] Decode empty slices to the default value
Browse files Browse the repository at this point in the history
Commit for further compatibility with #1353
  • Loading branch information
reindexer-bot committed Aug 29, 2024
1 parent f058ec1 commit d2f430e
Show file tree
Hide file tree
Showing 6 changed files with 209 additions and 473 deletions.
13 changes: 10 additions & 3 deletions cjson/decoder.go
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,7 @@ func (dec *Decoder) decodeSlice(pl *payloadIface, rdser *Serializer, v *reflect.
var ptr unsafe.Pointer

k := v.Kind()

offset := 0
switch k {
case reflect.Slice:
Expand All @@ -331,7 +332,11 @@ func (dec *Decoder) decodeSlice(pl *payloadIface, rdser *Serializer, v *reflect.
// offset is 0
// No concatenation for the fixed size arrays
default:
panic(fmt.Errorf("can not convert '%s' to 'array'", v.Type().Kind().String()))
if count == 0 { // Allows empty slice for any scalar type (using default value)
return
} else {
panic(fmt.Errorf("can not convert '%s' to 'array'", v.Type().Kind().String()))
}
}

if subtag != TAG_OBJECT {
Expand Down Expand Up @@ -659,8 +664,10 @@ func (dec *Decoder) decodeValue(pl *payloadIface, rdser *Serializer, v reflect.V
switch ctagType {
case TAG_ARRAY:
count := int(rdser.GetVarUInt())
pl.getArray(int(ctagField), *cnt, count, v)
*cnt += count
if k == reflect.Slice || k == reflect.Array || count != 0 { // Allows empty slice for any scalar type (using default value)
pl.getArray(int(ctagField), *cnt, count, v)
*cnt += count
}
default:
pl.getValue(int(ctagField), *cnt, v)
(*cnt)++
Expand Down
31 changes: 0 additions & 31 deletions clang-tidy/.clang-tidy

This file was deleted.

10 changes: 0 additions & 10 deletions clang-tidy/.clang-tidy-ignore

This file was deleted.

Loading

0 comments on commit d2f430e

Please sign in to comment.