Skip to content

Commit 7d87848

Browse files
authored
common: fix crash when player_connect.networkid is malformed or missing (#306)
1 parent 11dec79 commit 7d87848

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

pkg/demoinfocs/common/common.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
package common
33

44
import (
5+
"fmt"
56
"math/rand"
67
"strconv"
78
"strings"
@@ -218,6 +219,10 @@ func NewTeamState(team Team, membersCallback func(Team) []*Player) TeamState {
218219
func ConvertSteamIDTxtTo32(steamID string) (uint32, error) {
219220
arr := strings.Split(steamID, ":")
220221

222+
if len(arr) != 3 {
223+
return 0, fmt.Errorf("SteamID '%s' not well formed", steamID)
224+
}
225+
221226
Y, err := strconv.ParseUint(arr[1], 10, 32)
222227
if err != nil {
223228
return 0, err

pkg/demoinfocs/common/common_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ func TestConvertSteamIDTxtTo32_Error(t *testing.T) {
147147

148148
assert.Equal(t, uint32(0), id)
149149
assert.NotNil(t, err)
150+
151+
id, err = ConvertSteamIDTxtTo32("STEAM_0:b")
152+
153+
assert.Equal(t, uint32(0), id)
154+
assert.NotNil(t, err)
150155
}
151156

152157
func TestConvertSteamID32To64(t *testing.T) {

pkg/demoinfocs/game_events.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -520,11 +520,13 @@ func (geh gameEventHandler) playerConnect(data map[string]*msg.CSVCMsg_GameEvent
520520
guid: data["networkid"].GetValString(),
521521
}
522522

523-
var err error
524-
pl.xuid, err = guidToSteamID64(pl.guid)
523+
if pl.guid != "" {
524+
var err error
525+
pl.xuid, err = guidToSteamID64(pl.guid)
525526

526-
if err != nil {
527-
geh.parser.setError(fmt.Errorf("failed to parse player XUID: %v", err.Error()))
527+
if err != nil {
528+
geh.parser.setError(fmt.Errorf("failed to parse player XUID: %v", err.Error()))
529+
}
528530
}
529531

530532
geh.parser.rawPlayers[int(data["index"].GetValByte())] = pl

0 commit comments

Comments
 (0)