@@ -17,6 +17,10 @@ import (
1717const entitySentinel = 9999
1818
1919func (p * Parser ) handlePacketEntities (pe * msg.CSVCMsg_PacketEntities ) {
20+ defer func () {
21+ p .setError (recoverFromPanic (recover ()))
22+ }()
23+
2024 r := bit .NewSmallBitReader (bytes .NewReader (pe .EntityData ))
2125
2226 currentEntity := - 1
@@ -80,13 +84,21 @@ func (p *Parser) readEnterPVS(reader *bit.BitReader, entityID int) *st.Entity {
8084}
8185
8286func (p * Parser ) handleGameEventList (gel * msg.CSVCMsg_GameEventList ) {
87+ defer func () {
88+ p .setError (recoverFromPanic (recover ()))
89+ }()
90+
8391 p .gehDescriptors = make (map [int32 ]* msg.CSVCMsg_GameEventListDescriptorT )
8492 for _ , d := range gel .GetDescriptors () {
8593 p .gehDescriptors [d .GetEventid ()] = d
8694 }
8795}
8896
8997func (p * Parser ) handleGameEvent (ge * msg.CSVCMsg_GameEvent ) {
98+ defer func () {
99+ p .setError (recoverFromPanic (recover ()))
100+ }()
101+
90102 if p .gehDescriptors == nil {
91103 p .warn ("Received GameEvent but event descriptors are missing" )
92104 return
@@ -517,6 +529,10 @@ func getCommunityID(guid string) int64 {
517529}
518530
519531func (p * Parser ) handleUpdateStringTable (tab * msg.CSVCMsg_UpdateStringTable ) {
532+ defer func () {
533+ p .setError (recoverFromPanic (recover ()))
534+ }()
535+
520536 cTab := p .stringTables [tab .TableId ]
521537 switch cTab .Name {
522538 case stNameUserInfo :
@@ -527,10 +543,13 @@ func (p *Parser) handleUpdateStringTable(tab *msg.CSVCMsg_UpdateStringTable) {
527543 // Only handle updates for the above types
528544 p .handleCreateStringTable (cTab )
529545 }
530-
531546}
532547
533548func (p * Parser ) handleCreateStringTable (tab * msg.CSVCMsg_CreateStringTable ) {
549+ defer func () {
550+ p .setError (recoverFromPanic (recover ()))
551+ }()
552+
534553 if tab .Name == stNameModelPreCache {
535554 for i := len (p .modelPreCache ); i < int (tab .MaxEntries ); i ++ {
536555 p .modelPreCache = append (p .modelPreCache , "" )
@@ -617,6 +636,10 @@ func (p *Parser) handleCreateStringTable(tab *msg.CSVCMsg_CreateStringTable) {
617636}
618637
619638func (p * Parser ) handleUserMessage (um * msg.CSVCMsg_UserMessage ) {
639+ defer func () {
640+ p .setError (recoverFromPanic (recover ()))
641+ }()
642+
620643 switch msg .ECstrike15UserMessages (um .MsgType ) {
621644 case msg .ECstrike15UserMessages_CS_UM_SayText :
622645 st := new (msg.CCSUsrMsg_SayText )
@@ -679,6 +702,10 @@ type frameParsedTokenType struct{}
679702var frameParsedToken = new (frameParsedTokenType )
680703
681704func (p * Parser ) handleFrameParsed (* frameParsedTokenType ) {
705+ defer func () {
706+ p .setError (recoverFromPanic (recover ()))
707+ }()
708+
682709 for k , rp := range p .rawPlayers {
683710 if rp == nil {
684711 continue
0 commit comments