Skip to content

Commit f5428ac

Browse files
committed
Deduplicate LabelIDs in issue_search
1 parent 46660f1 commit f5428ac

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

models/issues/issue_search.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
repo_model "code.gitea.io/gitea/models/repo"
1414
"code.gitea.io/gitea/models/unit"
1515
user_model "code.gitea.io/gitea/models/user"
16+
"code.gitea.io/gitea/modules/container"
1617
"code.gitea.io/gitea/modules/util"
1718

1819
"xorm.io/builder"
@@ -129,7 +130,10 @@ func applyLabelsCondition(sess *xorm.Session, opts *IssuesOptions) *xorm.Session
129130
if opts.LabelIDs[0] == 0 {
130131
sess.Where("issue.id NOT IN (SELECT issue_id FROM issue_label)")
131132
} else {
132-
for i, labelID := range opts.LabelIDs {
133+
// We deduplicate the ID to reduce the load the database
134+
// (possible DoS here by multiplying the joins)
135+
uniqueLabelIDs := container.SetOf(opts.LabelIDs...).Values()
136+
for i, labelID := range uniqueLabelIDs {
133137
if labelID > 0 {
134138
sess.Join("INNER", fmt.Sprintf("issue_label il%d", i),
135139
fmt.Sprintf("issue.id = il%[1]d.issue_id AND il%[1]d.label_id = %[2]d", i, labelID))

0 commit comments

Comments
 (0)