@@ -152,23 +152,27 @@ func (p *parser) handleUpdateStringTable(tab *msgs2.CSVCMsg_UpdateStringTable, s
152152 case stNameInstanceBaseline :
153153 // Only handle updates for the above types
154154 // Create fake CreateStringTable and handle it like one of those
155- p .processStringTable (& msgs2.CSVCMsg_CreateStringTable {
156- Name : cTab .Name ,
157- NumEntries : tab .NumChangedEntries ,
158- UserDataFixedSize : cTab .UserDataFixedSize ,
159- UserDataSize : cTab .UserDataSize ,
160- UserDataSizeBits : cTab .UserDataSizeBits ,
161- Flags : cTab .Flags ,
162- StringData : tab .StringData ,
163- }, s2 )
155+ p .processStringTable (createStringTable {
156+ CSVCMsg_CreateStringTable : & msgs2.CSVCMsg_CreateStringTable {
157+ Name : cTab .Name ,
158+ NumEntries : tab .NumChangedEntries ,
159+ UserDataFixedSize : cTab .UserDataFixedSize ,
160+ UserDataSize : cTab .UserDataSize ,
161+ UserDataSizeBits : cTab .UserDataSizeBits ,
162+ Flags : cTab .Flags ,
163+ StringData : tab .StringData ,
164+ },
165+ isS2 : s2 ,
166+ s1MaxEntries : cTab .s1MaxEntries ,
167+ })
164168 }
165169}
166170
167171func (p * parser ) handleUpdateStringTableS2 (tab * msgs2.CSVCMsg_UpdateStringTable ) {
168172 p .handleUpdateStringTable (tab , true )
169173}
170174
171- func (p * parser ) handleCreateStringTable (tab * msgs2. CSVCMsg_CreateStringTable , s2 bool ) {
175+ func (p * parser ) handleCreateStringTable (tab createStringTable ) {
172176 defer func () {
173177 p .setError (recoverFromUnexpectedEOF (recover ()))
174178 }()
@@ -179,7 +183,7 @@ func (p *parser) handleCreateStringTable(tab *msgs2.CSVCMsg_CreateStringTable, s
179183 case stNameModelPreCache :
180184 fallthrough
181185 case stNameInstanceBaseline :
182- p .processStringTable (tab , s2 )
186+ p .processStringTable (tab )
183187 }
184188
185189 p .stringTables = append (p .stringTables , tab )
@@ -188,23 +192,26 @@ func (p *parser) handleCreateStringTable(tab *msgs2.CSVCMsg_CreateStringTable, s
188192}
189193
190194func (p * parser ) handleCreateStringTableS2 (tab * msgs2.CSVCMsg_CreateStringTable ) {
191- p .handleCreateStringTable (tab , true )
195+ p .handleCreateStringTable (createStringTable {
196+ CSVCMsg_CreateStringTable : tab ,
197+ isS2 : true ,
198+ })
192199}
193200
194- func (p * parser ) processStringTableS1 (tab * msgs2. CSVCMsg_CreateStringTable , br * bit.BitReader ) {
201+ func (p * parser ) processStringTableS1 (tab createStringTable , br * bit.BitReader ) {
195202 hist := make ([]string , 0 )
196203 idx := - 1
197204
198- entryBits := int (math .Ceil (math .Log2 (float64 (tab .GetNumEntries () ))))
205+ nEntryBits := int (math .Ceil (math .Log2 (float64 (* tab .s1MaxEntries ))))
199206
200207 for i := 0 ; i < int (tab .GetNumEntries ()); i ++ {
201208 if br .ReadBit () {
202209 idx ++
203210 } else {
204- idx = int (br .ReadInt (entryBits ))
211+ idx = int (br .ReadInt (nEntryBits ))
205212 }
206213
207- if idx < 0 || idx >= int (tab .GetNumEntries () ) {
214+ if idx < 0 || idx >= int (* tab .s1MaxEntries ) {
208215 panic ("Something went to shit" )
209216 }
210217
@@ -388,7 +395,7 @@ func parseStringTable(buf []byte, numUpdates int32, name string, userDataFixed b
388395 return items
389396}
390397
391- func (p * parser ) processStringTableS2 (tab * msgs2. CSVCMsg_CreateStringTable , br * bit.BitReader ) {
398+ func (p * parser ) processStringTableS2 (tab createStringTable , br * bit.BitReader ) {
392399 items := parseStringTable (tab .StringData , tab .GetNumEntries (), tab .GetName (), tab .GetUserDataFixedSize (), tab .GetUserDataSize (), tab .GetFlags ())
393400
394401 for _ , item := range items {
@@ -409,8 +416,7 @@ func (p *parser) processStringTableS2(tab *msgs2.CSVCMsg_CreateStringTable, br *
409416 }
410417}
411418
412- //nolint:funlen,gocognit
413- func (p * parser ) processStringTable (tab * msgs2.CSVCMsg_CreateStringTable , s2 bool ) {
419+ func (p * parser ) processStringTable (tab createStringTable ) {
414420 if tab .GetName () == stNameModelPreCache {
415421 for i := len (p .modelPreCache ); i < int (tab .GetNumEntries ()); i ++ {
416422 p .modelPreCache = append (p .modelPreCache , "" )
@@ -419,6 +425,7 @@ func (p *parser) processStringTable(tab *msgs2.CSVCMsg_CreateStringTable, s2 boo
419425
420426 if tab .GetDataCompressed () {
421427 tmp := make ([]byte , tab .GetUncompressedSize ())
428+
422429 b , err := snappy .Decode (tmp , tab .StringData )
423430 if err != nil {
424431 panic (err )
@@ -429,7 +436,7 @@ func (p *parser) processStringTable(tab *msgs2.CSVCMsg_CreateStringTable, s2 boo
429436
430437 br := bit .NewSmallBitReader (bytes .NewReader (tab .StringData ))
431438
432- if s2 {
439+ if tab . isS2 {
433440 p .processStringTableS2 (tab , br )
434441 } else {
435442 if br .ReadBit () {
@@ -567,15 +574,18 @@ func (p *parser) handleCreateStringTableS1(tab *msg.CSVCMsg_CreateStringTable) {
567574 size := int32 (len (tab .StringData ))
568575 compressed := false
569576
570- p .handleCreateStringTable (& msgs2.CSVCMsg_CreateStringTable {
571- Name : tab .Name ,
572- NumEntries : tab .NumEntries ,
573- UserDataFixedSize : tab .UserDataFixedSize ,
574- UserDataSize : tab .UserDataSize ,
575- UserDataSizeBits : tab .UserDataSizeBits ,
576- Flags : tab .Flags ,
577- StringData : tab .StringData ,
578- UncompressedSize : & size ,
579- DataCompressed : & compressed ,
580- }, false )
577+ p .handleCreateStringTable (createStringTable {
578+ CSVCMsg_CreateStringTable : & msgs2.CSVCMsg_CreateStringTable {
579+ Name : tab .Name ,
580+ NumEntries : tab .NumEntries ,
581+ UserDataFixedSize : tab .UserDataFixedSize ,
582+ UserDataSize : tab .UserDataSize ,
583+ UserDataSizeBits : tab .UserDataSizeBits ,
584+ Flags : tab .Flags ,
585+ StringData : tab .StringData ,
586+ UncompressedSize : & size ,
587+ DataCompressed : & compressed ,
588+ },
589+ s1MaxEntries : tab .MaxEntries ,
590+ })
581591}
0 commit comments