[llvm] [Dexter] Sanitize user details from git repo URL in dexter --version (PR #105533)

Stephen Tozer via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 21 07:12:11 PDT 2024


https://github.com/SLTozer created https://github.com/llvm/llvm-project/pull/105533

Currently the output of dexter --version contains the raw output of `git remote get-url origin`, which may contain a username and password. This patch adds a small change to remove these from the output string. A similar patch for LLVM's default version string[0] also removes the git URL altogether unless opted-in to; it's not clear whether this is a necessary or desirable step yet, but if so we can trivially remove the URL from Dexter as well.

[0]: https://github.com/llvm/llvm-project/pull/105220

>From 1be4c5aa0d1347e3dccce02b7a83ff82788a72a9 Mon Sep 17 00:00:00 2001
From: Stephen Tozer <stephen.tozer at sony.com>
Date: Wed, 21 Aug 2024 15:07:48 +0100
Subject: [PATCH] Sanitize user details from git repo URL in dexter --version

Currently the output of dexter --version contains the raw output of
`git remote get-url origin`, which may contain a username and password.
This patch adds a small change to remove these from the output string.
A similar patch for LLVM's default version string[0] also removes the git
URL altogether unless opted-in to; it's not clear whether this is a necessary
or desirable step yet, but if so we can trivially remove the URL from Dexter
as well.

[0]: https://github.com/llvm/llvm-project/pull/105220
---
 .../debuginfo-tests/dexter/dex/utils/Version.py   | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/cross-project-tests/debuginfo-tests/dexter/dex/utils/Version.py b/cross-project-tests/debuginfo-tests/dexter/dex/utils/Version.py
index 505aebaebc4f42..89ab5c2dbd72a3 100644
--- a/cross-project-tests/debuginfo-tests/dexter/dex/utils/Version.py
+++ b/cross-project-tests/debuginfo-tests/dexter/dex/utils/Version.py
@@ -9,10 +9,23 @@
 import os
 from subprocess import CalledProcessError, check_output, STDOUT
 import sys
+from urllib.parse import urlparse, urlunparse
 
 from dex import __version__
 
 
+def sanitize_repo_url(repo):
+    parsed = urlparse(repo)
+    # No username present, repo URL is fine.
+    if parsed.username is None:
+        return repo
+    # Otherwise, strip the login details from the URL by reconstructing the netloc from just `<hostname>(:<port>)?`.
+    sanitized_netloc = parsed.hostname
+    if parsed.port:
+        sanitized_netloc = f"{sanitized_netloc}:{parsed.port}"
+    return urlunparse(parsed._replace(netloc=sanitized_netloc))
+
+
 def _git_version():
     dir_ = os.path.dirname(__file__)
     try:
@@ -28,7 +41,7 @@ def _git_version():
             .rstrip()
             .decode("utf-8")
         )
-        repo = (
+        repo = sanitize_repo_url(
             check_output(
                 ["git", "remote", "get-url", "origin"], stderr=STDOUT, cwd=dir_
             )



More information about the llvm-commits mailing list