From 498885b33e4006aa47622f7fb9807741a6c0ac7d Mon Sep 17 00:00:00 2001 From: Raymond Rebbeck Date: Fri, 5 Jun 2026 00:54:36 +0930 Subject: [PATCH 1/2] Fix invalid regular expression in branch name special character check Backslash characters not correctly escaped. `webui.branchNamePattern.source` starts and ends with `^` and `$` respectively, which do not work when inserted into the middle of another regular expression so chop off the first and last characters to avoid this. --- git-webui/release/share/git-webui/webui/js/git-webui.js | 2 +- git-webui/src/share/git-webui/webui/js/git-webui.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/git-webui/release/share/git-webui/webui/js/git-webui.js b/git-webui/release/share/git-webui/webui/js/git-webui.js index 8239f774..67504e9d 100644 --- a/git-webui/release/share/git-webui/webui/js/git-webui.js +++ b/git-webui/release/share/git-webui/webui/js/git-webui.js @@ -474,7 +474,7 @@ webui.SideBarView = function(mainView, noEventHandlers) { if (id.indexOf("local-branches") > -1) { // parses the output of git branch --verbose --verbose // only match branch names with supported characters (see webui.branchNamePattern) - var reMatchGitBranchOutput = new RegExp("^\*?\s*("+ webui.branchNamePattern.source +")\s+([^\s]+)\s+(\[.*\])?.*") + var reMatchGitBranchOutput = new RegExp("^\\*?\\s*("+ webui.branchNamePattern.source.substring(1,webui.branchNamePattern.source.length-1) +")\\s+([^\\s]+)\\s+(\\[.*\\])?.*") var matches = reMatchGitBranchOutput.exec(ref); if (!matches) { $(cardDiv).remove(); diff --git a/git-webui/src/share/git-webui/webui/js/git-webui.js b/git-webui/src/share/git-webui/webui/js/git-webui.js index 8239f774..67504e9d 100644 --- a/git-webui/src/share/git-webui/webui/js/git-webui.js +++ b/git-webui/src/share/git-webui/webui/js/git-webui.js @@ -474,7 +474,7 @@ webui.SideBarView = function(mainView, noEventHandlers) { if (id.indexOf("local-branches") > -1) { // parses the output of git branch --verbose --verbose // only match branch names with supported characters (see webui.branchNamePattern) - var reMatchGitBranchOutput = new RegExp("^\*?\s*("+ webui.branchNamePattern.source +")\s+([^\s]+)\s+(\[.*\])?.*") + var reMatchGitBranchOutput = new RegExp("^\\*?\\s*("+ webui.branchNamePattern.source.substring(1,webui.branchNamePattern.source.length-1) +")\\s+([^\\s]+)\\s+(\\[.*\\])?.*") var matches = reMatchGitBranchOutput.exec(ref); if (!matches) { $(cardDiv).remove(); From 3ed77b60ce464f6cc06eea580feb16042f3f4c36 Mon Sep 17 00:00:00 2001 From: Raymond Rebbeck Date: Sun, 7 Jun 2026 23:09:08 +0930 Subject: [PATCH 2/2] Check that the branch name pattern actually has a '^' prefix or '$' suffix before removing them --- .../release/share/git-webui/webui/js/git-webui.js | 11 ++++++++++- git-webui/src/share/git-webui/webui/js/git-webui.js | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/git-webui/release/share/git-webui/webui/js/git-webui.js b/git-webui/release/share/git-webui/webui/js/git-webui.js index 67504e9d..84b3c3a3 100644 --- a/git-webui/release/share/git-webui/webui/js/git-webui.js +++ b/git-webui/release/share/git-webui/webui/js/git-webui.js @@ -472,9 +472,18 @@ webui.SideBarView = function(mainView, noEventHandlers) { } var cardDiv = $('
').appendTo(accordionDiv)[0]; if (id.indexOf("local-branches") > -1) { + // Remove any '^' prefix or '$' suffix from the branch name regex + // So that it can be inserted into the middle of another regex below + var branchNamePattern = webui.branchNamePattern.source + if (branchNamePattern.substring(0, 1) == "^") { + branchNamePattern = branchNamePattern.substring(1, branchNamePattern.length) + } + if (branchNamePattern.substring(branchNamePattern.length-1, branchNamePattern.length) == "$") { + branchNamePattern = branchNamePattern.substring(0, branchNamePattern.length-1) + } // parses the output of git branch --verbose --verbose // only match branch names with supported characters (see webui.branchNamePattern) - var reMatchGitBranchOutput = new RegExp("^\\*?\\s*("+ webui.branchNamePattern.source.substring(1,webui.branchNamePattern.source.length-1) +")\\s+([^\\s]+)\\s+(\\[.*\\])?.*") + var reMatchGitBranchOutput = new RegExp("^\\*?\\s*("+ branchNamePattern +")\\s+([^\\s]+)\\s+(\\[.*\\])?.*") var matches = reMatchGitBranchOutput.exec(ref); if (!matches) { $(cardDiv).remove(); diff --git a/git-webui/src/share/git-webui/webui/js/git-webui.js b/git-webui/src/share/git-webui/webui/js/git-webui.js index 67504e9d..84b3c3a3 100644 --- a/git-webui/src/share/git-webui/webui/js/git-webui.js +++ b/git-webui/src/share/git-webui/webui/js/git-webui.js @@ -472,9 +472,18 @@ webui.SideBarView = function(mainView, noEventHandlers) { } var cardDiv = $('
').appendTo(accordionDiv)[0]; if (id.indexOf("local-branches") > -1) { + // Remove any '^' prefix or '$' suffix from the branch name regex + // So that it can be inserted into the middle of another regex below + var branchNamePattern = webui.branchNamePattern.source + if (branchNamePattern.substring(0, 1) == "^") { + branchNamePattern = branchNamePattern.substring(1, branchNamePattern.length) + } + if (branchNamePattern.substring(branchNamePattern.length-1, branchNamePattern.length) == "$") { + branchNamePattern = branchNamePattern.substring(0, branchNamePattern.length-1) + } // parses the output of git branch --verbose --verbose // only match branch names with supported characters (see webui.branchNamePattern) - var reMatchGitBranchOutput = new RegExp("^\\*?\\s*("+ webui.branchNamePattern.source.substring(1,webui.branchNamePattern.source.length-1) +")\\s+([^\\s]+)\\s+(\\[.*\\])?.*") + var reMatchGitBranchOutput = new RegExp("^\\*?\\s*("+ branchNamePattern +")\\s+([^\\s]+)\\s+(\\[.*\\])?.*") var matches = reMatchGitBranchOutput.exec(ref); if (!matches) { $(cardDiv).remove();