@@ -65,7 +65,12 @@ func (es EventStore) Stream(
6565 return fmt .Errorf ("firestore.EventStore.Stream: failed while reading iterator, %w" , err )
6666 }
6767
68- msg , err := es .Serde .Deserialize (doc .Data ()["payload" ].([]byte ))
68+ payload , ok := doc .Data ()["payload" ].([]byte )
69+ if ! ok {
70+ return fmt .Errorf ("firestore.EventStore.Stream: invalid payload type, expected: []byte, got: %T" , doc .Data ()["payload" ])
71+ }
72+
73+ msg , err := es .Serde .Deserialize (payload )
6974 if err != nil {
7075 return fmt .Errorf ("firestore.EventStore.Stream: failed to deserialize message payload, %w" , err )
7176 }
@@ -75,9 +80,14 @@ func (es EventStore) Stream(
7580 metadata = v
7681 }
7782
83+ v , ok := doc .Data ()["version" ].(int64 )
84+ if ! ok {
85+ return fmt .Errorf ("firestore.EventStore.Stream: invalid version type, expected: int64, got: %T" , doc .Data ()["version" ])
86+ }
87+
7888 stream <- event.Persisted {
7989 StreamID : id ,
80- Version : version .Version (doc . Data ()[ "version" ].( int64 )),
90+ Version : version .Version (v ), //nolint:gosec // This should not overflow.
8191 Envelope : event.Envelope {
8292 Message : msg ,
8393 Metadata : metadata ,
@@ -102,8 +112,14 @@ func (es EventStore) checkAndUpsertEventStream(
102112 }
103113
104114 var currentVersion version.Version
115+
105116 if err == nil {
106- currentVersion = version .Version (doc .Data ()["last_version" ].(int64 ))
117+ lastVersion , ok := doc .Data ()["last_version" ].(int64 )
118+ if ! ok {
119+ return 0 , fmt .Errorf ("firestore.EventStore.Append: invalid last_version type, expected: int64, got: %T" , doc .Data ()["last_version" ])
120+ }
121+
122+ currentVersion = version .Version (lastVersion ) //nolint:gosec // This should not overflow.
107123 }
108124
109125 if v , ok := expected .(version.CheckExact ); ok && version .Version (v ) != currentVersion {
@@ -113,7 +129,7 @@ func (es EventStore) checkAndUpsertEventStream(
113129 })
114130 }
115131
116- newVersion := currentVersion + version .Version (newEventsLength )
132+ newVersion := currentVersion + version .Version (newEventsLength ) //nolint:gosec // This should not overflow.
117133
118134 if err := tx .Set (docRef , map [string ]interface {}{
119135 "last_version" : newVersion ,
@@ -165,7 +181,7 @@ func (es EventStore) Append(
165181 for i , evt := range events {
166182 if err := es .appendEvent (tx , event.Persisted {
167183 StreamID : id ,
168- Version : currentVersion + version .Version (i ) + 1 ,
184+ Version : currentVersion + version .Version (i ) + 1 , //nolint:gosec // This should not overflow.
169185 Envelope : evt ,
170186 }); err != nil {
171187 return err
@@ -177,5 +193,5 @@ func (es EventStore) Append(
177193 return 0 , fmt .Errorf ("firestore.EventStore.Append: failed to commit transaction, %w" , err )
178194 }
179195
180- return currentVersion + version .Version (len (events )), nil
196+ return currentVersion + version .Version (len (events )), nil //nolint:gosec // This should not overflow.
181197}
0 commit comments