Skip to content

Commit 3ecd0c8

Browse files
committed
Merge branch 'jn/maint-gitweb-invalid-regexp' into maint
* jn/maint-gitweb-invalid-regexp: gitweb: Handle invalid regexp in regexp search
2 parents 3fc242f + 36612e4 commit 3ecd0c8

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
@@ -1073,7 +1073,16 @@ sub evaluate_and_validate_params {
10731073
if (length($searchtext) < 2) {
10741074
die_error(403, "At least two characters are required for search parameter");
10751075
}
1076-
$search_regexp = $search_use_regexp ? $searchtext : quotemeta $searchtext;
1076+
if ($search_use_regexp) {
1077+
$search_regexp = $searchtext;
1078+
if (!eval { qr/$search_regexp/; 1; }) {
1079+
(my $error = $@) =~ s/ at \S+ line \d+.*\n?//;
1080+
die_error(400, "Invalid search regexp '$search_regexp'",
1081+
esc_html($error));
1082+
}
1083+
} else {
1084+
$search_regexp = quotemeta $searchtext;
1085+
}
10771086
}
10781087
}
10791088

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)