Skip to content

Commit 6a3a3db

Browse files
committed
Merge branch 'jn/maint-gitweb-invalid-regexp'
* jn/maint-gitweb-invalid-regexp: gitweb: Handle invalid regexp in regexp search
2 parents 57a4249 + 36612e4 commit 6a3a3db

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

gitweb/gitweb.perl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1081,7 +1081,16 @@ sub evaluate_and_validate_params {
10811081
if (length($searchtext) < 2) {
10821082
die_error(403, "At least two characters are required for search parameter");
10831083
}
1084-
$search_regexp = $search_use_regexp ? $searchtext : quotemeta $searchtext;
1084+
if ($search_use_regexp) {
1085+
$search_regexp = $searchtext;
1086+
if (!eval { qr/$search_regexp/; 1; }) {
1087+
(my $error = $@) =~ s/ at \S+ line \d+.*\n?//;
1088+
die_error(400, "Invalid search regexp '$search_regexp'",
1089+
esc_html($error));
1090+
}
1091+
} else {
1092+
$search_regexp = quotemeta $searchtext;
1093+
}
10851094
}
10861095
}
10871096

t/t9501-gitweb-standalone-http-status.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,4 +134,14 @@ our $maxload = undef;
134134
EOF
135135

136136

137+
# ----------------------------------------------------------------------
138+
# invalid arguments
139+
140+
test_expect_success 'invalid arguments: invalid regexp (in project search)' '
141+
gitweb_run "a=project_list;s=*\.git;sr=1" &&
142+
grep "Status: 400" gitweb.headers &&
143+
grep "400 - Invalid.*regexp" gitweb.body
144+
'
145+
test_debug 'cat gitweb.headers'
146+
137147
test_done

0 commit comments

Comments
 (0)