Skip to content

Commit

Permalink
Bug 1064140: [SECURITY] Private comments can be shown to flagmail rec…
Browse files Browse the repository at this point in the history
…ipients who aren't in the insider group

r=glob,a=glob
  • Loading branch information
Simon Green authored and dklawren committed Oct 6, 2014
1 parent 6d6b390 commit 976dc12
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 18 deletions.
15 changes: 9 additions & 6 deletions Bugzilla/Bug.pm
Expand Up @@ -908,12 +908,6 @@ sub update {
join(', ', @added_names)];
}

# Flags
my ($removed, $added) = Bugzilla::Flag->update_flags($self, $old_bug, $delta_ts);
if ($removed || $added) {
$changes->{'flagtypes.name'} = [$removed, $added];
}

# Comments
foreach my $comment (@{$self->{added_comments} || []}) {
# Override the Comment's timestamp to be identical to the update
Expand All @@ -936,6 +930,9 @@ sub update {
Bugzilla->user->id, $delta_ts, $comment->id);
}

# Clear the cache of comments
delete $self->{comments};

# Insert the values into the multiselect value tables
my @multi_selects = grep {$_->type == FIELD_TYPE_MULTI_SELECT}
Bugzilla->active_custom_fields;
Expand Down Expand Up @@ -971,6 +968,12 @@ sub update {
$_->update foreach @{ $self->{_update_ref_bugs} || [] };
delete $self->{_update_ref_bugs};

# Flags
my ($removed, $added) = Bugzilla::Flag->update_flags($self, $old_bug, $delta_ts);
if ($removed || $added) {
$changes->{'flagtypes.name'} = [$removed, $added];
}

# Log bugs_activity items
# XXX Eventually, when bugs_activity is able to track the dupe_id,
# this code should go below the duplicates-table-updating code below.
Expand Down
28 changes: 21 additions & 7 deletions Bugzilla/Flag.pm
Expand Up @@ -975,18 +975,32 @@ sub notify {
$default_lang = Bugzilla::User->new()->setting('lang');
}

# Get comments on the bug
my $all_comments = $bug->comments({ after => $bug->lastdiffed });
@$all_comments = grep { $_->type || $_->body =~ /\S/ } @$all_comments;

# Get public only comments
my $public_comments = [ grep { !$_->is_private } @$all_comments ];

foreach my $to (keys %recipients) {
# Add threadingmarker to allow flag notification emails to be the
# threaded similar to normal bug change emails.
my $thread_user_id = $recipients{$to} ? $recipients{$to}->id : 0;

my $vars = { 'flag' => $flag,
'old_flag' => $old_flag,
'to' => $to,
'date' => $timestamp,
'bug' => $bug,
'attachment' => $attachment,
'threadingmarker' => build_thread_marker($bug->id, $thread_user_id) };
# We only want to show private comments to users in the is_insider group
my $comments = $recipients{$to} && $recipients{$to}->is_insider
? $all_comments : $public_comments;

my $vars = {
flag => $flag,
old_flag => $old_flag,
to => $to,
date => $timestamp,
bug => $bug,
attachment => $attachment,
threadingmarker => build_thread_marker($bug->id, $thread_user_id),
new_comments => $comments,
};

my $lang = $recipients{$to} ?
$recipients{$to}->setting('lang') : $default_lang;
Expand Down
13 changes: 8 additions & 5 deletions template/en/default/request/email.txt.tmpl
Expand Up @@ -80,11 +80,14 @@ Attachment [% attidsummary %]

[%- FILTER bullet = wrap(80) %]

[% USE Bugzilla %]
[%-# .defined is necessary to avoid a taint issue in Perl < 5.10.1, see bug 509794. %]
[% IF Bugzilla.cgi.param("comment").defined && Bugzilla.cgi.param("comment").length > 0 %]
------- Additional Comments from [% user.identity %]
[%+ Bugzilla.cgi.param("comment") FILTER strip_control_chars %]
[% FOREACH comment = new_comments %]

[%- IF comment.count %]
--- Comment #[% comment.count %] from [% comment.author.identity %] ---
[% ELSE %]
--- Description ---
[% END %]
[%+ comment.body_full({ is_bugmail => 1, wrap => 1 }) FILTER strip_control_chars %]
[% END %]

[%- END %]

0 comments on commit 976dc12

Please sign in to comment.