1
0
Fork 0
mirror of https://github.com/eosswedenorg/thalos synced 2026-06-19 04:50:02 +02:00

internal/server/ship_processor.go: fix a bug where blockResult.Deltas whas not properly nil checked. Resulting in panic if accessed

This commit is contained in:
Henrik Hautakoski 2024-05-17 16:57:13 +02:00
parent c02cff0e05
commit cc754ee976

View file

@ -249,50 +249,52 @@ func (processor *ShipProcessor) processBlock(blockResult *ship.GetBlocksResultV0
} }
// Process deltas // Process deltas
deltas := []ship.TableDelta{} if blockResult.Deltas != nil {
if err := blockResult.Deltas.Unpack(&deltas); err != nil { deltas := []ship.TableDelta{}
mainLogger.WithError(err).Error("Failed to unpack table deltas") if err := blockResult.Deltas.Unpack(&deltas); err != nil {
} else { mainLogger.WithError(err).Error("Failed to unpack table deltas")
for _, delta := range deltas { } else {
for _, delta := range deltas {
logger := mainLogger.WithField("type", "table_delta").Dup() logger := mainLogger.WithField("type", "table_delta").Dup()
rows := []message.TableDeltaRow{} rows := []message.TableDeltaRow{}
for _, row := range delta.V0.Rows { for _, row := range delta.V0.Rows {
msg := message.TableDeltaRow{ msg := message.TableDeltaRow{
Present: row.Present, Present: row.Present,
RawData: row.Data, RawData: row.Data,
} }
if processor.shipABI != nil { if processor.shipABI != nil {
v, err := processor.shipABI.Decode(bytes.NewReader(row.Data), delta.V0.Name) v, err := processor.shipABI.Decode(bytes.NewReader(row.Data), delta.V0.Name)
if err == nil {
v, err := parseTableDeltaData(v)
if err == nil { if err == nil {
msg.Data = v v, err := parseTableDeltaData(v)
if err == nil {
msg.Data = v
} else {
logger.WithError(err).Error("Failed to parse table delta data")
}
} else { } else {
logger.WithError(err).Error("Failed to parse table delta data") logger.Error("Failed to decode table delta")
} }
} else { } else {
logger.Error("Failed to decode table delta") logger.Warn("No SHIP ABI present")
} }
} else { rows = append(rows, msg)
logger.Warn("No SHIP ABI present")
} }
rows = append(rows, msg)
}
msg := message.TableDelta{ msg := message.TableDelta{
BlockNum: blockNumber, BlockNum: blockNumber,
Timestamp: timestamp, Timestamp: timestamp,
Name: delta.V0.Name, Name: delta.V0.Name,
Rows: rows, Rows: rows,
} }
if err := processor.queue.PostTableDelta(msg); err != nil { if err := processor.queue.PostTableDelta(msg); err != nil {
logger.WithError(err).Error("Failed to post table delta message") logger.WithError(err).Error("Failed to post table delta message")
}
} }
} }
} }