Re: [PATCHv2] gitweb: Git config keys are case insensitive, make config search too

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCHv2] gitweb: Git config keys are case insensitive, make config search too

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:51:41

Jakub Narebski [off-list ref] writes:
"git config -z -l" that gitweb uses in git_parse_project_config() to
populate %config hash returns section and key names of config
variables in lowercase (they are case insensitive).  When checking
%config in git_get_project_config() we have to take it into account.

Gitweb does not (yet?) use git config variables with subsection, so we
can simply lowercase $key in git_get_project_config (only subsection
names are case sensitive).
Why stop there, I have to wonder, instead of futureproofing with minimum
cost, even with something naïve like:

	if (my ($hi, $mi, $lo) = ($key =~ /^([^.]*)\.(.*)\.(.*)$)) {
		$key = join(".", lc($hi), $mi, lc($lo);
	} else {
        	$key = lc($key);
	}
quoted hunk
Signed-off-by: Jakub Narebski <redacted>
---
I think it is a resend, but I haven't found first version.

The patch is unchanged, but commit message got improved.
It is not as much bugfix as hardening (against user e.g. adding
new overridable feature via gitweb config file).

 gitweb/gitweb.perl |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 1070805..90b5a73 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -2526,6 +2526,7 @@ sub git_get_project_config {
 
 	# key sanity check
 	return unless ($key);
+	$key = lc($key); # assuming there is no subsection
 	$key =~ s/^gitweb\.//;
 	return if ($key =~ m/\W/);
 

[PATCHv3] gitweb: Git config keys are case insensitive, make config search too

From: Jakub Narebski <hidden>
Date: 2016-06-15 22:51:41

"git config -z -l" that gitweb uses in git_parse_project_config() to
populate %config hash returns section and key names of config
variables in lowercase (they are case insensitive).  When checking
%config in git_get_project_config() we have to take it into account.

Helped-by: Junio C Hamano [off-list ref]
Signed-off-by: Jakub Narebski <redacted>
---
On Thu, 28 Jul 2011, Junio C Hamano napisał:
Jakub Narebski [off-list ref] writes:
quoted
"git config -z -l" that gitweb uses in git_parse_project_config() to
populate %config hash returns section and key names of config
variables in lowercase (they are case insensitive).  When checking
%config in git_get_project_config() we have to take it into account.

Gitweb does not (yet?) use git config variables with subsection, so we
can simply lowercase $key in git_get_project_config (only subsection
names are case sensitive).
Why stop there, I have to wonder, instead of futureproofing with minimum
cost, even with something naïve like:

	if (my ($hi, $mi, $lo) = ($key =~ /^([^.]*)\.(.*)\.(.*)$)) {
		$key = join(".", lc($hi), $mi, lc($lo);
	} else {
        	$key = lc($key);
	}
Well, I thought it would be more involved than this.

Anyway, here it is:

 gitweb/gitweb.perl |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 1070805..f858d1b 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -2526,6 +2526,13 @@ sub git_get_project_config {
 
 	# key sanity check
 	return unless ($key);
+	# only subsection, if exists, is case sensitive,
+	# and not lowercased by 'git config -z -l'
+	if (my ($hi, $mi, $lo) = ($key =~ /^([^.]*)\.(.*)\.([^.]*)$/)) {
+		$key = join(".", lc($hi), $mi, lc($lo));
+	} else {
+		$key = lc($key);
+	}
 	$key =~ s/^gitweb\.//;
 	return if ($key =~ m/\W/);
 
-- 
1.7.5
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help