Skip to content

Fix Bitbucket line highlighting URLs#4854

Merged
shahzadhaider1 merged 7 commits intotrufflesecurity:mainfrom
shahzadhaider1:INS-115-bitbucket-links-are-malformed
Apr 10, 2026
Merged

Fix Bitbucket line highlighting URLs#4854
shahzadhaider1 merged 7 commits intotrufflesecurity:mainfrom
shahzadhaider1:INS-115-bitbucket-links-are-malformed

Conversation

@shahzadhaider1
Copy link
Copy Markdown
Contributor

@shahzadhaider1 shahzadhaider1 commented Mar 31, 2026

Problem

Bitbucket source links generated by TruffleHog do not highlight the correct line when clicked.

  • Bitbucket Cloud: GenerateLink() produces /commits/{hash} URLs with no file path or line fragment. UpdateLinkLineNumber() explicitly skips Bitbucket with a comment saying "it doesn't support line links", which is incorrect.
  • Bitbucket Server/Data Center: URLs use custom domains that determineProvider() doesn't recognize, so they fall through to the default case which appends GitHub-style #L{line} fragments. This format does not work on Bitbucket Server.

Root Cause

determineProvider() only detects Bitbucket Cloud (bitbucket.org). Bitbucket Server URLs are unrecognized and treated as GitHub/GitLab. Neither Cloud nor Server gets the correct line fragment format.

Fix

GenerateLink(): Bitbucket Cloud now generates /src/{commit}/{file} URLs (matching the existing behavior in the scanner's makeCommitURL) with #lines-{line} fragments.
UpdateLinkLineNumber():

  • Bitbucket Cloud (bitbucket.org): appends #lines-{line}
  • Bitbucket Server/Data Center (detected via /projects/.../repos/... path structure): appends #{line} (bare number)

determineProvider(): New providerBitbucketServer detection using isBitbucketServerURL() which checks for the distinctive /projects/ + /repos/ path pattern in Bitbucket Server URLs.

Correct URL formats

Platform: Bitbucket Cloud
View: Source File
Fragment format: #lines-{line}

Platform: Bitbucket Server
View: Source File
Fragment format: #{line}

References

Verification

Working examples:

Checklist:

  • Tests passing (make test-community)?
  • Lint passing (make lint this requires golangci-lint)?

Testing

Scan now produces results that include the line number in the secret location URL and upon clicking those URLs, the secrets are correctly highlighted, as shown in the screenshots below:
image
image
image


Note

Low Risk
Low risk: changes are limited to URL/provider detection and link formatting, with expanded unit tests; primary risk is mis-detecting Bitbucket Server URLs and producing slightly different links for Bitbucket Cloud outputs.

Overview
Fixes Bitbucket hyperlink generation so findings link directly to the source file and highlight the correct line.

GenerateLink now builds Bitbucket Cloud URLs as /src/{commit}/{file} and appends #lines-{N} when a line is available. Provider detection is extended with a new BitbucketServer type (detected via /projects/.../repos/... path structure), and UpdateLinkLineNumber now updates fragments for Bitbucket Cloud (#lines-N, replacing any existing lines-...) and Bitbucket Server/Data Center (#N). Tests are updated to cover the new Bitbucket Cloud/Server link and line-update behaviors.

Reviewed by Cursor Bugbot for commit 59d5562. Bugbot is set up for automated code reviews on this repo. Configure here.

@shahzadhaider1 shahzadhaider1 marked this pull request as ready for review March 31, 2026 13:19
@shahzadhaider1 shahzadhaider1 requested a review from a team March 31, 2026 13:19
@shahzadhaider1 shahzadhaider1 requested review from a team as code owners March 31, 2026 13:19
Copy link
Copy Markdown
Contributor

@alafiand alafiand left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like a good fix to make these links more useful. I imagine downstream consumers of these links could have systems in place relying on the old URL format, but I can't imagine they will be upset to see that the links have been fixed.

Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Reviewed by Cursor Bugbot for commit 4f22ca1. Configure here.

Comment thread pkg/giturl/giturl.go
if line > 0 {
baseLink += "#lines-" + strconv.FormatInt(line, 10)
}
return baseLink
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New provider unhandled in GenerateLink switch statement

Low Severity

providerBitbucketServer is added to determineProvider and handled in UpdateLinkLineNumber, but GenerateLink has no corresponding case. If a Bitbucket Server URL (containing /projects/ and /repos/) is ever passed to GenerateLink, it silently falls through to the default case, which applies GitHub-style formatting (/blob/ path, #L fragment) and assumes a .git suffix — both incorrect for Bitbucket Server. While current callers don't trigger this path, the inconsistency between the two functions is a maintenance hazard.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 4f22ca1. Configure here.

@shahzadhaider1 shahzadhaider1 merged commit 580628b into trufflesecurity:main Apr 10, 2026
14 checks passed
@shahzadhaider1 shahzadhaider1 deleted the INS-115-bitbucket-links-are-malformed branch April 10, 2026 19:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants