diff --git a/pkg/icingadb/objectpacker/objectpacker.go b/pkg/icingadb/objectpacker/objectpacker.go index be481ddf..85c0f6fb 100644 --- a/pkg/icingadb/objectpacker/objectpacker.go +++ b/pkg/icingadb/objectpacker/objectpacker.go @@ -17,6 +17,8 @@ func PackAny(in interface{}, out io.Writer) error { return packValue(reflect.ValueOf(in), out) } +var tBytes = reflect.TypeOf([]uint8(nil)) + // packValue does the actual job of packAny and just exists for recursion w/o unneccessary reflect.ValueOf calls. func packValue(in reflect.Value, out io.Writer) error { switch kind := in.Kind(); kind { @@ -50,7 +52,8 @@ func packValue(in reflect.Value, out io.Writer) error { } // Pack []byte as string, not array of numbers. - return packString(in.Interface().([]uint8), out) + return packString(in.Convert(tBytes). // Support types.Binary + Interface().([]uint8), out) } if _, err := out.Write([]byte{5}); err != nil { diff --git a/pkg/icingadb/objectpacker/objectpacker_test.go b/pkg/icingadb/objectpacker/objectpacker_test.go index 7b15ccf1..3f7f201c 100644 --- a/pkg/icingadb/objectpacker/objectpacker_test.go +++ b/pkg/icingadb/objectpacker/objectpacker_test.go @@ -2,6 +2,7 @@ package objectpacker import ( "bytes" + "github.com/icinga/icingadb/pkg/types" "io" "testing" "unsafe" @@ -129,6 +130,7 @@ func TestPackAny(t *testing.T) { assertPackAny(t, binary, append([]byte{4, 0, 0, 0, 0, 0, 0, 1, 0}, binary[:]...)) assertPackAny(t, binary[:], append([]byte{4, 0, 0, 0, 0, 0, 0, 1, 0}, binary[:]...)) + assertPackAny(t, types.Binary(binary[:]), append([]byte{4, 0, 0, 0, 0, 0, 0, 1, 0}, binary[:]...)) } assertPackAnyPanic(t, complex64(0+0i), 0)