# normally the policy would just live in one .cgi file.
# Additionally, correct_urlbase() cannot be called at compile time, so this can't be a constant.
sub SHOW_BUG_MODAL_CSP {
- return (
+ my ($bug_id) = @_;
+ my %policy = (
script_src => ['self', 'nonce', 'unsafe-inline', 'unsafe-eval' ],
object_src => [correct_urlbase() . "extensions/BugModal/web/ZeroClipboard/ZeroClipboard.swf"],
+ img_src => [ 'self', 'https://secure.gravatar.com' ],
connect_src => [
'self',
# This is from extensions/OrangeFactor/web/js/orange_factor.js
'https://ashughes1.github.io/bugzilla-socorro-lens/chart.htm'
],
);
+ if (use_attachbase() && $bug_id) {
+ my $attach_base = Bugzilla->params->{'attachment_base'};
+ $attach_base =~ s/\%bugid\%/$bug_id/g;
+ push @{ $policy{img_src} }, $attach_base;
+ }
+
+ return %policy;
}
sub _init_bz_cgi_globals {
Bugzilla::Hook::process('show_bug_format', $show_bug_format);
if ($show_bug_format->{format} eq 'modal') {
- $cgi->content_security_policy(Bugzilla::CGI::SHOW_BUG_MODAL_CSP());
+ $cgi->content_security_policy(Bugzilla::CGI::SHOW_BUG_MODAL_CSP($bugid));
}
print $cgi->header();
Bugzilla::Hook::process('show_bug_format', $show_bug_format);
if ($show_bug_format->{format} eq 'modal') {
- $cgi->content_security_policy(Bugzilla::CGI::SHOW_BUG_MODAL_CSP());
+ $cgi->content_security_policy(Bugzilla::CGI::SHOW_BUG_MODAL_CSP($bug->id));
}
print $cgi->header();
Bugzilla::Hook::process('show_bug_format', $show_bug_format);
if ($show_bug_format->{format} eq 'modal') {
- $cgi->content_security_policy(Bugzilla::CGI::SHOW_BUG_MODAL_CSP());
+ $cgi->content_security_policy(Bugzilla::CGI::SHOW_BUG_MODAL_CSP($bug->id));
}
print $cgi->header();
$cgi->delete('format');
if ($user->setting('ui_experiments') eq 'on') {
- Bugzilla->cgi->content_security_policy(Bugzilla::CGI::SHOW_BUG_MODAL_CSP());
+ Bugzilla->cgi->content_security_policy(Bugzilla::CGI::SHOW_BUG_MODAL_CSP($bug->id));
}
print $cgi->header();
$template->process($format->{'template'}, $vars)
};
Bugzilla::Hook::process('show_bug_format', $format_params);
if ($format_params->{format} eq 'modal') {
- $cgi->content_security_policy(Bugzilla::CGI::SHOW_BUG_MODAL_CSP());
+ my $bug_id = $vars->{bug} ? $vars->{bug}->id : undef;
+ $cgi->content_security_policy(Bugzilla::CGI::SHOW_BUG_MODAL_CSP($bug_id));
}
my $format = $template->get_format("bug/show",
$format_params->{format},
use Bugzilla::Bug;
use Bugzilla::Hook;
use Bugzilla::CGI;
+use Bugzilla::Util qw(detaint_natural);
my $cgi = Bugzilla->cgi;
my $template = Bugzilla->template;
$format_params->{format},
$format_params->{ctype});
-if ($format_params->{format} eq 'modal') {
- $cgi->content_security_policy(Bugzilla::CGI::SHOW_BUG_MODAL_CSP());
-}
-
# Editable, 'single' HTML bugs are treated slightly specially in a few places
my $single = (!$format->{format} || $format->{format} ne 'multiple')
&& $format->{extension} eq 'html';
exit;
}
+if ($format_params->{format} eq 'modal') {
+ my $bug_id = $cgi->param('id');
+ detaint_natural($bug_id);
+ $cgi->content_security_policy(Bugzilla::CGI::SHOW_BUG_MODAL_CSP($bug_id));
+}
+
+
my @bugs;
my %marks;