eth/filters: apply limit to topic search positions

This commit is contained in:
zsfelfoldi 2025-09-16 13:09:40 +02:00
parent 3cc4015d29
commit f91cf22312
2 changed files with 18 additions and 4 deletions

View file

@ -347,9 +347,16 @@ func (api *FilterAPI) GetLogs(ctx context.Context, crit FilterCriteria) ([]*type
if len(crit.Topics) > maxTopics { if len(crit.Topics) > maxTopics {
return nil, errExceedMaxTopics return nil, errExceedMaxTopics
} }
if api.logQueryLimit != 0 {
if len(crit.Addresses) > api.logQueryLimit { if len(crit.Addresses) > api.logQueryLimit {
return nil, errExceedLogQueryLimit return nil, errExceedLogQueryLimit
} }
for _, topics := range crit.Topics {
if len(topics) > api.logQueryLimit {
return nil, errExceedLogQueryLimit
}
}
}
var filter *Filter var filter *Filter
if crit.BlockHash != nil { if crit.BlockHash != nil {

View file

@ -295,9 +295,16 @@ func (es *EventSystem) SubscribeLogs(crit ethereum.FilterQuery, logs chan []*typ
if len(crit.Topics) > maxTopics { if len(crit.Topics) > maxTopics {
return nil, errExceedMaxTopics return nil, errExceedMaxTopics
} }
if es.sys.cfg.LogQueryLimit != 0 {
if len(crit.Addresses) > es.sys.cfg.LogQueryLimit { if len(crit.Addresses) > es.sys.cfg.LogQueryLimit {
return nil, errExceedLogQueryLimit return nil, errExceedLogQueryLimit
} }
for _, topics := range crit.Topics {
if len(topics) > es.sys.cfg.LogQueryLimit {
return nil, errExceedLogQueryLimit
}
}
}
var from, to rpc.BlockNumber var from, to rpc.BlockNumber
if crit.FromBlock == nil { if crit.FromBlock == nil {
from = rpc.LatestBlockNumber from = rpc.LatestBlockNumber