Skip to content

Commit

Permalink
Fix panic on reading nil TLV8 #1507
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexxIT committed Feb 24, 2025
1 parent 90544ba commit 45b223a
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
9 changes: 9 additions & 0 deletions pkg/hap/camera/accessory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 10 additions & 3 deletions pkg/hap/character.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package hap
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"

Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit 45b223a

Please sign in to comment.