Fixed a bug with exclude lists

This commit is contained in:
Ice3man543 2021-03-14 01:23:41 +05:30
parent 788465fc36
commit 35bdde6be6
2 changed files with 12 additions and 13 deletions

View File

@ -51,13 +51,13 @@ func Parse(filePath string, options protocols.ExecuterOptions) (*Template, error
} }
matchWithTags := false matchWithTags := false
if len(options.Options.Tags) > 0 { if len(options.Options.Tags) > 0 {
if err := matchTemplateWithTags(types.ToString(templateTags), types.ToString(template.Info["severity"]), options.Options); err != nil { if err := matchTemplateWithTags(types.ToString(templateTags), types.ToString(template.Info["severity"]), options.Options.Tags); err != nil {
return nil, nil return nil, nil
} }
matchWithTags = true matchWithTags = true
} }
if len(options.Options.ExcludeTags) > 0 && !matchWithTags { if len(options.Options.ExcludeTags) > 0 && !matchWithTags {
if err := matchTemplateWithTags(types.ToString(templateTags), types.ToString(template.Info["severity"]), options.Options); err == nil { if err := matchTemplateWithTags(types.ToString(templateTags), types.ToString(template.Info["severity"]), options.Options.ExcludeTags); err == nil {
return nil, nil return nil, nil
} }
} }
@ -207,7 +207,7 @@ func (t *Template) parseWorkflowTemplate(workflow *workflows.WorkflowTemplate, o
} }
// matchTemplateWithTags matches if the template matches a tag // matchTemplateWithTags matches if the template matches a tag
func matchTemplateWithTags(tags, severity string, options *types.Options) error { func matchTemplateWithTags(tags, severity string, tagsInput []string) error {
actualTags := strings.Split(tags, ",") actualTags := strings.Split(tags, ",")
if severity != "" { if severity != "" {
actualTags = append(actualTags, severity) // also add severity to tag actualTags = append(actualTags, severity) // also add severity to tag
@ -215,7 +215,7 @@ func matchTemplateWithTags(tags, severity string, options *types.Options) error
matched := false matched := false
mainLoop: mainLoop:
for _, t := range options.Tags { for _, t := range tagsInput {
commaTags := strings.Split(t, ",") commaTags := strings.Split(t, ",")
for _, tag := range commaTags { for _, tag := range commaTags {
tag = strings.TrimSpace(tag) tag = strings.TrimSpace(tag)

View File

@ -3,40 +3,39 @@ package templates
import ( import (
"testing" "testing"
"github.com/projectdiscovery/nuclei/v2/pkg/types"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestMatchTemplateWithTags(t *testing.T) { func TestMatchTemplateWithTags(t *testing.T) {
err := matchTemplateWithTags("php,linux,symfony", "", &types.Options{Tags: []string{"php"}}) err := matchTemplateWithTags("php,linux,symfony", "", []string{"php"})
require.Nil(t, err, "could not get php tag from input slice") require.Nil(t, err, "could not get php tag from input slice")
err = matchTemplateWithTags("lang:php,os:linux,cms:symfony", "", &types.Options{Tags: []string{"cms:symfony"}}) err = matchTemplateWithTags("lang:php,os:linux,cms:symfony", "", []string{"cms:symfony"})
require.Nil(t, err, "could not get php tag from input key value") require.Nil(t, err, "could not get php tag from input key value")
err = matchTemplateWithTags("lang:php,os:linux,symfony", "", &types.Options{Tags: []string{"cms:symfony"}}) err = matchTemplateWithTags("lang:php,os:linux,symfony", "", []string{"cms:symfony"})
require.NotNil(t, err, "could get key value tag from input key value") require.NotNil(t, err, "could get key value tag from input key value")
err = matchTemplateWithTags("lang:php,os:linux,cms:jira", "", &types.Options{Tags: []string{"cms:symfony"}}) err = matchTemplateWithTags("lang:php,os:linux,cms:jira", "", []string{"cms:symfony"})
require.NotNil(t, err, "could get key value tag from input key value") require.NotNil(t, err, "could get key value tag from input key value")
t.Run("space", func(t *testing.T) { t.Run("space", func(t *testing.T) {
err = matchTemplateWithTags("lang:php, os:linux, cms:symfony", "", &types.Options{Tags: []string{"cms:symfony"}}) err = matchTemplateWithTags("lang:php, os:linux, cms:symfony", "", []string{"cms:symfony"})
require.Nil(t, err, "could get key value tag from input key value with space") require.Nil(t, err, "could get key value tag from input key value with space")
}) })
t.Run("comma-tags", func(t *testing.T) { t.Run("comma-tags", func(t *testing.T) {
err = matchTemplateWithTags("lang:php,os:linux,cms:symfony", "", &types.Options{Tags: []string{"test,cms:symfony"}}) err = matchTemplateWithTags("lang:php,os:linux,cms:symfony", "", []string{"test,cms:symfony"})
require.Nil(t, err, "could get key value tag from input key value with comma") require.Nil(t, err, "could get key value tag from input key value with comma")
}) })
t.Run("severity", func(t *testing.T) { t.Run("severity", func(t *testing.T) {
err = matchTemplateWithTags("lang:php,os:linux,cms:symfony", "low", &types.Options{Tags: []string{"low"}}) err = matchTemplateWithTags("lang:php,os:linux,cms:symfony", "low", []string{"low"})
require.Nil(t, err, "could get key value tag for severity") require.Nil(t, err, "could get key value tag for severity")
}) })
t.Run("blank-tags", func(t *testing.T) { t.Run("blank-tags", func(t *testing.T) {
err = matchTemplateWithTags("", "low", &types.Options{Tags: []string{"jira"}}) err = matchTemplateWithTags("", "low", []string{"jira"})
require.NotNil(t, err, "could get value tag for blank severity") require.NotNil(t, err, "could get value tag for blank severity")
}) })
} }