Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 4 additions & 12 deletions pkg/tmplexec/generic/exec.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package generic

import (
"strings"
"sync/atomic"

"github.com/projectdiscovery/gologger"
"github.com/projectdiscovery/nuclei/v3/pkg/output"
"github.com/projectdiscovery/nuclei/v3/pkg/protocols"
"github.com/projectdiscovery/nuclei/v3/pkg/scan"
"github.com/projectdiscovery/nuclei/v3/pkg/tmplexec/utils"
mapsutil "github.com/projectdiscovery/utils/maps"
)

Expand Down Expand Up @@ -64,17 +64,9 @@ func (g *Generic) ExecuteWithResults(ctx *scan.ScanContext) error {
// ideally this should never happen since protocol exits on error and callback is not called
return
}
ID := req.GetID()
if ID != "" {
builder := &strings.Builder{}
for k, v := range event.InternalEvent {
builder.WriteString(ID)
builder.WriteString("_")
builder.WriteString(k)
_ = previous.Set(builder.String(), v)
builder.Reset()
}
}

utils.FillPreviousEvent(req.GetID(), event, previous)

if event.HasOperatorResult() {
g.results.CompareAndSwap(false, true)
}
Expand Down
14 changes: 2 additions & 12 deletions pkg/tmplexec/multiproto/multi.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ package multiproto

import (
"strconv"
"strings"
"sync/atomic"

"github.com/projectdiscovery/nuclei/v3/pkg/output"
"github.com/projectdiscovery/nuclei/v3/pkg/protocols"
"github.com/projectdiscovery/nuclei/v3/pkg/protocols/common/generators"
"github.com/projectdiscovery/nuclei/v3/pkg/scan"
"github.com/projectdiscovery/nuclei/v3/pkg/templates/types"
"github.com/projectdiscovery/nuclei/v3/pkg/tmplexec/utils"
mapsutil "github.com/projectdiscovery/utils/maps"
stringsutil "github.com/projectdiscovery/utils/strings"
)
Expand Down Expand Up @@ -90,17 +90,7 @@ func (m *MultiProtocol) ExecuteWithResults(ctx *scan.ScanContext) error {
return
}

ID := req.GetID()
if ID != "" {
builder := &strings.Builder{}
for k, v := range event.InternalEvent {
builder.WriteString(ID)
builder.WriteString("_")
builder.WriteString(k)
_ = previous.Set(builder.String(), v)
builder.Reset()
}
}
utils.FillPreviousEvent(req.GetID(), event, previous)

// log event and generate result for the event
ctx.LogEvent(event)
Expand Down
34 changes: 34 additions & 0 deletions pkg/tmplexec/utils/utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package utils

import (
"strings"

"github.com/projectdiscovery/nuclei/v3/pkg/output"
mapsutil "github.com/projectdiscovery/utils/maps"
)

// FillPreviousEvent is a helper function to get the previous event from the event
// without leading to duplicate prefixes
func FillPreviousEvent(reqID string, event *output.InternalWrappedEvent, previous *mapsutil.SyncLockMap[string, any]) {
if reqID == "" {
return
}

for k, v := range event.InternalEvent {
if _, ok := previous.Get(k); ok {
continue
}

if strings.HasPrefix(k, reqID+"_") {
continue
}

var builder strings.Builder

builder.WriteString(reqID)
builder.WriteString("_")
builder.WriteString(k)

_ = previous.Set(builder.String(), v)
}
}
Loading