summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bug_form.pl90
-rw-r--r--globals.pl126
-rwxr-xr-xlong_list.cgi2
-rwxr-xr-xprocess_bug.cgi8
-rwxr-xr-xprocessmail4
5 files changed, 134 insertions, 96 deletions
diff --git a/bug_form.pl b/bug_form.pl
index bac65d14c..e74f4f4d8 100644
--- a/bug_form.pl
+++ b/bug_form.pl
@@ -40,89 +40,6 @@ sub bug_form_pl_sillyness {
$zz = @::legal_severity;
}
-my %knownattachments;
-
-# This routine quoteUrls contains inspirations from the HTML::FromText CPAN
-# module by Gareth Rees <garethr@cre.canon.co.uk>. It has been heavily hacked,
-# all that is really recognizable from the original is bits of the regular
-# expressions.
-
-sub quoteUrls {
- my $text = shift; # Take a copy; don't modify in-place.
- return $text unless $text;
-
- my $base = Param('urlbase');
-
- my $protocol = join '|',
- qw(afs cid ftp gopher http https mid news nntp prospero telnet wais);
-
- my %options = ( metachars => 1, @_ );
-
- my $count = 0;
-
- # Now, quote any "#" characters so they won't confuse stuff later
- $text =~ s/#/%#/g;
-
- # Next, find anything that looks like a URL or an email address and
- # pull them out the the text, replacing them with a "##<digits>##
- # marker, and writing them into an array. All this confusion is
- # necessary so that we don't match on something we've already replaced,
- # which can happen if you do multiple s///g operations.
-
- my @things;
- while ($text =~ s%((mailto:)?([\w\.\-\+\=]+\@[\w\-]+(?:\.[\w\-]+)+)\b|
- (\b((?:$protocol):[^ \t\n<>"]+[\w/])))%"##$count##"%exo) {
- my $item = $&;
-
- $item = value_quote($item);
-
- if ($item !~ m/^$protocol:/o && $item !~ /^mailto:/) {
- # We must have grabbed this one because it looks like an email
- # address.
- $item = qq{<A HREF="mailto:$item">$item</A>};
- } else {
- $item = qq{<A HREF="$item">$item</A>};
- }
-
- $things[$count++] = $item;
- }
- while ($text =~ s/\bbug(\s|%\#)*(\d+)/"##$count##"/ei) {
- my $item = $&;
- my $num = $2;
- $item = value_quote($item); # Not really necessary, since we know
- # there's no special chars in it.
- $item = qq{<A HREF="show_bug.cgi?id=$num">$item</A>};
- $things[$count++] = $item;
- }
- while ($text =~ s/\*\*\* This bug has been marked as a duplicate of (\d+) \*\*\*/"##$count##"/ei) {
- my $item = $&;
- my $num = $1;
- $item =~ s@\d+@<A HREF="show_bug.cgi?id=$num">$num</A>@;
- $things[$count++] = $item;
- }
- while ($text =~ s/Created an attachment \(id=(\d+)\)/"##$count##"/e) {
- my $item = $&;
- my $num = $1;
- if (exists $knownattachments{$num}) {
- $item = qq{<A HREF="showattachment.cgi?attach_id=$num">$item</A>};
- }
- $things[$count++] = $item;
- }
-
- $text = value_quote($text);
- $text =~ s/\&#010;/\n/g;
-
- # Stuff everything back from the array.
- for (my $i=0 ; $i<$count ; $i++) {
- $text =~ s/##$i##/$things[$i]/e;
- }
-
- # And undo the quoting of "#" characters.
- $text =~ s/%#/#/g;
-
- return $text;
-}
-
my $loginok = quietly_check_login();
my $id = $::FORM{'id'};
@@ -208,7 +125,7 @@ print qq{<FORM NAME="changeform" METHOD="POST" ACTION="process_bug.cgi">\n};
# print qq{<INPUT TYPE="HIDDEN" NAME="orig-$i" VALUE="$q">\n};
# }
-$bug{'long_desc'} = GetLongDescription($id);
+$bug{'long_desc'} = GetLongDescriptionAsHTML($id);
my $longdesclength = length($bug{'long_desc'});
GetVersionTable();
@@ -370,7 +287,6 @@ while (MoreSQLData()) {
my $link = "showattachment.cgi?attach_id=$attachid";
$desc = value_quote($desc);
print qq{<td><a href="$link">$date</a></td><td colspan=4>$desc</td></tr><tr><td></td>};
- $knownattachments{$attachid} = 1;
}
print "<td colspan=6><a href=\"createattachment.cgi?id=$id\">Create a new attachment</a> (proposed patch, testcase, etc.)</td></tr></table>\n";
@@ -550,11 +466,9 @@ print "
<table><tr><td align=left><B>Description:</B></td>
<td align=right width=100%>Opened: $bug{'creation_ts'}</td></tr></table>
<HR>
-<PRE>
";
-print quoteUrls($bug{'long_desc'}, email=>1, urls=>1);
+print $bug{'long_desc'};
print "
-</PRE>
<HR>\n";
# To add back option of editing the long description, insert after the above
diff --git a/globals.pl b/globals.pl
index 8e05fc0d2..954c55971 100644
--- a/globals.pl
+++ b/globals.pl
@@ -562,7 +562,88 @@ sub DBNameToIdAndCheck {
exit(0);
}
-sub GetLongDescription {
+# This routine quoteUrls contains inspirations from the HTML::FromText CPAN
+# module by Gareth Rees <garethr@cre.canon.co.uk>. It has been heavily hacked,
+# all that is really recognizable from the original is bits of the regular
+# expressions.
+
+sub quoteUrls {
+ my ($knownattachments, $text) = (@_);
+ return $text unless $text;
+
+ my $base = Param('urlbase');
+
+ my $protocol = join '|',
+ qw(afs cid ftp gopher http https mid news nntp prospero telnet wais);
+
+ my %options = ( metachars => 1, @_ );
+
+ my $count = 0;
+
+ # Now, quote any "#" characters so they won't confuse stuff later
+ $text =~ s/#/%#/g;
+
+ # Next, find anything that looks like a URL or an email address and
+ # pull them out the the text, replacing them with a "##<digits>##
+ # marker, and writing them into an array. All this confusion is
+ # necessary so that we don't match on something we've already replaced,
+ # which can happen if you do multiple s///g operations.
+
+ my @things;
+ while ($text =~ s%((mailto:)?([\w\.\-\+\=]+\@[\w\-]+(?:\.[\w\-]+)+)\b|
+ (\b((?:$protocol):[^ \t\n<>"]+[\w/])))%"##$count##"%exo) {
+ my $item = $&;
+
+ $item = value_quote($item);
+
+ if ($item !~ m/^$protocol:/o && $item !~ /^mailto:/) {
+ # We must have grabbed this one because it looks like an email
+ # address.
+ $item = qq{<A HREF="mailto:$item">$item</A>};
+ } else {
+ $item = qq{<A HREF="$item">$item</A>};
+ }
+
+ $things[$count++] = $item;
+ }
+ while ($text =~ s/\bbug(\s|%\#)*(\d+)/"##$count##"/ei) {
+ my $item = $&;
+ my $num = $2;
+ $item = value_quote($item); # Not really necessary, since we know
+ # there's no special chars in it.
+ $item = qq{<A HREF="show_bug.cgi?id=$num">$item</A>};
+ $things[$count++] = $item;
+ }
+ while ($text =~ s/\*\*\* This bug has been marked as a duplicate of (\d+) \*\*\*/"##$count##"/ei) {
+ my $item = $&;
+ my $num = $1;
+ $item =~ s@\d+@<A HREF="show_bug.cgi?id=$num">$num</A>@;
+ $things[$count++] = $item;
+ }
+ while ($text =~ s/Created an attachment \(id=(\d+)\)/"##$count##"/e) {
+ my $item = $&;
+ my $num = $1;
+ if ($knownattachments->{$num}) {
+ $item = qq{<A HREF="showattachment.cgi?attach_id=$num">$item</A>};
+ }
+ $things[$count++] = $item;
+ }
+
+ $text = value_quote($text);
+ $text =~ s/\&#010;/\n/g;
+
+ # Stuff everything back from the array.
+ for (my $i=0 ; $i<$count ; $i++) {
+ $text =~ s/##$i##/$things[$i]/e;
+ }
+
+ # And undo the quoting of "#" characters.
+ $text =~ s/%#/#/g;
+
+ return $text;
+}
+
+sub GetLongDescriptionAsText {
my ($id, $start, $end) = (@_);
my $result = "";
my $count = 0;
@@ -598,6 +679,49 @@ sub GetLongDescription {
}
+sub GetLongDescriptionAsHTML {
+ my ($id, $start, $end) = (@_);
+ my $result = "";
+ my $count = 0;
+ my %knownattachments;
+ SendSQL("SELECT attach_id FROM attachments WHERE bug_id = $id");
+ while (MoreSQLData()) {
+ $knownattachments{FetchOneColumn()} = 1;
+ }
+
+ my ($query) = ("SELECT profiles.login_name, longdescs.bug_when, " .
+ " longdescs.thetext " .
+ "FROM longdescs, profiles " .
+ "WHERE profiles.userid = longdescs.who " .
+ " AND longdescs.bug_id = $id ");
+
+ if ($start && $start =~ /[1-9]/) {
+ # If the start is all zeros, then don't do this (because we want to
+ # not emit a leading "Addition Comments" line in that case.)
+ $query .= "AND longdescs.bug_when > '$start'";
+ $count = 1;
+ }
+ if ($end) {
+ $query .= "AND longdescs.bug_when <= '$end'";
+ }
+
+ $query .= "ORDER BY longdescs.bug_when";
+ SendSQL($query);
+ while (MoreSQLData()) {
+ my ($who, $when, $text) = (FetchSQLData());
+ if ($count) {
+ $result .= "<BR><BR><I>------- Additional Comments From " .
+ qq{<A HREF="$who">$who</A> } .
+ time2str("%Y-%m-%d %H:%M", str2time($when)) .
+ " -------</I><BR>\n";
+ }
+ $result .= "<PRE>" . quoteUrls(\%knownattachments, $text) . "</PRE>\n";
+ $count++;
+ }
+
+ return $result;
+}
+
sub ShowCcList {
my ($num) = (@_);
my @ccids;
diff --git a/long_list.cgi b/long_list.cgi
index 9b9f47d87..e095c59ec 100755
--- a/long_list.cgi
+++ b/long_list.cgi
@@ -116,7 +116,7 @@ foreach my $bug (split(/:/, $::FORM{'buglist'})) {
html_quote($status_whiteboard) . "\n";
}
print "<TR><TD><B>Description:</B>\n</TABLE>\n";
- print "<PRE>" . html_quote(GetLongDescription($bug)) . "</PRE>\n";
+ print GetLongDescriptionAsHTML($bug);
print "<HR>\n";
}
}
diff --git a/process_bug.cgi b/process_bug.cgi
index 0e11f16cc..ac8f1a395 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -609,14 +609,14 @@ The changes made were:
<p>
";
DumpBugActivity($id, $delta_ts);
- my $longdesc = GetLongDescription($id);
+ my $longdesc = GetLongDescriptionAsHTML($id);
my $longchanged = 0;
if (length($longdesc) > $::FORM{'longdesclength'}) {
$longchanged = 1;
- print "<P>Added text to the long description:<blockquote><pre>";
- print html_quote(substr($longdesc, $::FORM{'longdesclength'}));
- print "</pre></blockquote>\n";
+ print "<P>Added text to the long description:<blockquote>";
+ print substr($longdesc, $::FORM{'longdesclength'});
+ print "</blockquote>\n";
}
SendSQL("unlock tables");
print "You have the following choices: <ul>\n";
diff --git a/processmail b/processmail
index 618c6dbc1..9b9baa4dd 100755
--- a/processmail
+++ b/processmail
@@ -199,7 +199,7 @@ sub GetBugText {
$status_whiteboard = "StatusWhiteboard: $::bug{'status_whiteboard'}\n";
}
- $::bug{'long_desc'} = GetLongDescription($id);
+ $::bug{'long_desc'} = GetLongDescriptionAsText($id);
my @cclist;
@cclist = split(/,/, ShowCcList($id));
@@ -455,7 +455,7 @@ sub NewProcessOneBug {
}
- my $newcomments = GetLongDescription($id, $start, $end);
+ my $newcomments = GetLongDescriptionAsText($id, $start, $end);
my $count = 0;
for my $person ($values{'assigned_to'}, $values{'reporter'},