diff --git a/pkg/hap/camera/accessory_test.go b/pkg/hap/camera/accessory_test.go index e9894f0f..3f5dcd71 100644 --- a/pkg/hap/camera/accessory_test.go +++ b/pkg/hap/camera/accessory_test.go @@ -2,12 +2,21 @@ package camera import ( "encoding/base64" + "strings" "testing" "github.com/AlexxIT/go2rtc/pkg/hap" "github.com/stretchr/testify/require" ) +func TestNilCharacter(t *testing.T) { + var res SetupEndpoints + char := &hap.Character{} + err := char.ReadTLV8(&res) + require.NotNil(t, err) + require.NotNil(t, strings.Contains(err.Error(), "can't read value")) +} + type testTLV8 struct { name string value string diff --git a/pkg/hap/character.go b/pkg/hap/character.go index 4cd8857c..afa321e2 100644 --- a/pkg/hap/character.go +++ b/pkg/hap/character.go @@ -3,6 +3,7 @@ package hap import ( "bytes" "encoding/json" + "fmt" "io" "net/http" @@ -126,11 +127,17 @@ func (c *Character) Write(v any) (err error) { // ReadTLV8 value to right struct func (c *Character) ReadTLV8(v any) (err error) { - return tlv8.UnmarshalBase64(c.Value.(string), v) + if s, ok := c.Value.(string); ok { + return tlv8.UnmarshalBase64(s, v) + } + return fmt.Errorf("hap: can't read value: %v", v) } -func (c *Character) ReadBool() bool { - return c.Value.(bool) +func (c *Character) ReadBool() (bool, error) { + if v, ok := c.Value.(bool); ok { + return v, nil + } + return false, fmt.Errorf("hap: can't read value: %v", c.Value) } func (c *Character) String() string {