Fixed template validation edge cases (#2051)

This commit is contained in:
Ice3man 2022-05-25 11:26:05 +05:30 committed by GitHub
parent 77caa39161
commit 3648c47e35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 11 deletions

View File

@ -341,10 +341,9 @@ func (r *Runner) RunEnumeration() error {
if err != nil { if err != nil {
return errors.Wrap(err, "could not load templates from config") return errors.Wrap(err, "could not load templates from config")
} }
store.Load()
if r.options.Validate { if r.options.Validate {
if err := store.ValidateTemplates(r.options.Templates, r.options.Workflows); err != nil { if err := store.ValidateTemplates(); err != nil {
return err return err
} }
if stats.GetValue(parsers.SyntaxErrorStats) == 0 && stats.GetValue(parsers.SyntaxWarningStats) == 0 && stats.GetValue(parsers.RuntimeWarningsStats) == 0 { if stats.GetValue(parsers.SyntaxErrorStats) == 0 && stats.GetValue(parsers.SyntaxWarningStats) == 0 && stats.GetValue(parsers.RuntimeWarningsStats) == 0 {
@ -354,6 +353,7 @@ func (r *Runner) RunEnumeration() error {
} }
return nil // exit return nil // exit
} }
store.Load()
r.displayExecutionInfo(store) r.displayExecutionInfo(store)

View File

@ -1,8 +1,9 @@
package loader package loader
import ( import (
"errors" "os"
"github.com/pkg/errors"
"github.com/projectdiscovery/gologger" "github.com/projectdiscovery/gologger"
"github.com/projectdiscovery/nuclei/v2/pkg/catalog" "github.com/projectdiscovery/nuclei/v2/pkg/catalog"
"github.com/projectdiscovery/nuclei/v2/pkg/catalog/config" "github.com/projectdiscovery/nuclei/v2/pkg/catalog/config"
@ -119,11 +120,18 @@ func New(config *Config) (*Store, error) {
store.finalWorkflows = append(store.finalWorkflows, remoteWorkflows...) store.finalWorkflows = append(store.finalWorkflows, remoteWorkflows...)
} }
// Handle a dot as the current working directory
if len(store.finalTemplates) == 1 && store.finalTemplates[0] == "." {
currentDirectory, err := os.Getwd()
if err != nil {
return nil, errors.Wrap(err, "could not get current directory")
}
store.finalTemplates = []string{currentDirectory}
}
// Handle a case with no templates or workflows, where we use base directory // Handle a case with no templates or workflows, where we use base directory
if len(store.finalTemplates) == 0 && len(store.finalWorkflows) == 0 && !urlBasedTemplatesProvided { if len(store.finalTemplates) == 0 && len(store.finalWorkflows) == 0 && !urlBasedTemplatesProvided {
store.finalTemplates = []string{config.TemplatesDirectory} store.finalTemplates = []string{config.TemplatesDirectory}
} }
return store, nil return store, nil
} }
@ -157,13 +165,9 @@ func init() {
// ValidateTemplates takes a list of templates and validates them // ValidateTemplates takes a list of templates and validates them
// erroring out on discovering any faulty templates. // erroring out on discovering any faulty templates.
func (store *Store) ValidateTemplates(templatesList, workflowsList []string) error { func (store *Store) ValidateTemplates() error {
// consider all the templates by default if no templates passed by user templatePaths := store.config.Catalog.GetTemplatesPath(store.finalTemplates)
if len(templatesList) == 0 { workflowPaths := store.config.Catalog.GetTemplatesPath(store.finalWorkflows)
templatesList = store.finalTemplates
}
templatePaths := store.config.Catalog.GetTemplatesPath(templatesList)
workflowPaths := store.config.Catalog.GetTemplatesPath(workflowsList)
filteredTemplatePaths := store.pathFilter.Match(templatePaths) filteredTemplatePaths := store.pathFilter.Match(templatePaths)
filteredWorkflowPaths := store.pathFilter.Match(workflowPaths) filteredWorkflowPaths := store.pathFilter.Match(workflowPaths)