Skip to content

Commit

Permalink
Copy metadata for line number aware sources (#1011)
Browse files Browse the repository at this point in the history
* Copy metadata for line number aware sources

* Improve style
  • Loading branch information
bill-rich committed Jan 10, 2023
1 parent 864cf00 commit 8b2e1d3
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions pkg/engine/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"time"

"github.com/sirupsen/logrus"
"google.golang.org/protobuf/proto"

"github.com/trufflesecurity/trufflehog/v3/pkg/common"
"github.com/trufflesecurity/trufflehog/v3/pkg/context"
Expand Down Expand Up @@ -181,7 +182,6 @@ func (e *Engine) detectorWorker(ctx context.Context) {
for originalChunk := range e.chunks {
for chunk := range sources.Chunker(originalChunk) {
atomic.AddUint64(&e.bytesScanned, uint64(len(chunk.Data)))
fragStart, mdLine := FragmentFirstLine(chunk)
for _, decoder := range e.decoders {
var decoderType detectorspb.DecoderType
switch decoder.(type) {
Expand Down Expand Up @@ -230,9 +230,19 @@ func (e *Engine) detectorWorker(ctx context.Context) {
results = detectors.CleanResults(results)
}
for _, result := range results {
SetResultLineNumber(chunk, &result, fragStart, mdLine)
resultChunk := chunk
if isGitSource(chunk.SourceType) {
copyChunk := *chunk
copyMetaDataClone := proto.Clone(chunk.SourceMetadata)
if copyMetaData, ok := copyMetaDataClone.(*source_metadatapb.MetaData); ok {
copyChunk.SourceMetadata = copyMetaData
}
fragStart, mdLine := FragmentFirstLine(&copyChunk)
SetResultLineNumber(&copyChunk, &result, fragStart, mdLine)
resultChunk = &copyChunk
}
result.DecoderType = decoderType
e.results <- detectors.CopyMetadata(chunk, result)
e.results <- detectors.CopyMetadata(resultChunk, result)

}
if len(results) > 0 {
Expand Down Expand Up @@ -314,8 +324,6 @@ func FragmentFirstLine(chunk *sources.Chunk) (int64, *int64) {

// SetResultLineNumber sets the line number in the provided result.
func SetResultLineNumber(chunk *sources.Chunk, result *detectors.Result, fragStart int64, mdLine *int64) {
if isGitSource(chunk.SourceType) {
offset := FragmentLineOffset(chunk, result)
*mdLine = fragStart + offset
}
offset := FragmentLineOffset(chunk, result)
*mdLine = fragStart + offset
}

0 comments on commit 8b2e1d3

Please sign in to comment.