<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[174779] trunk/Websites/bugs.webkit.org</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/174779">174779</a></dd>
<dt>Author</dt> <dd>ddkilzer@apple.com</dd>
<dt>Date</dt> <dd>2014-10-16 09:01:32 -0700 (Thu, 16 Oct 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Upgrade to Bugzilla 4.2.11.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkWebsitesbugswebkitorgBugzillaAttachmentpm">trunk/Websites/bugs.webkit.org/Bugzilla/Attachment.pm</a></li>
<li><a href="#trunkWebsitesbugswebkitorgBugzillaAuthPersistCookiepm">trunk/Websites/bugs.webkit.org/Bugzilla/Auth/Persist/Cookie.pm</a></li>
<li><a href="#trunkWebsitesbugswebkitorgBugzillaBugpm">trunk/Websites/bugs.webkit.org/Bugzilla/Bug.pm</a></li>
<li><a href="#trunkWebsitesbugswebkitorgBugzillaChartpm">trunk/Websites/bugs.webkit.org/Bugzilla/Chart.pm</a></li>
<li><a href="#trunkWebsitesbugswebkitorgBugzillaConstantspm">trunk/Websites/bugs.webkit.org/Bugzilla/Constants.pm</a></li>
<li><a href="#trunkWebsitesbugswebkitorgBugzillaDBSqlitepm">trunk/Websites/bugs.webkit.org/Bugzilla/DB/Sqlite.pm</a></li>
<li><a href="#trunkWebsitesbugswebkitorgBugzillaFlagpm">trunk/Websites/bugs.webkit.org/Bugzilla/Flag.pm</a></li>
<li><a href="#trunkWebsitesbugswebkitorgBugzillaInstallRequirementspm">trunk/Websites/bugs.webkit.org/Bugzilla/Install/Requirements.pm</a></li>
<li><a href="#trunkWebsitesbugswebkitorgBugzillaTemplatepm">trunk/Websites/bugs.webkit.org/Bugzilla/Template.pm</a></li>
<li><a href="#trunkWebsitesbugswebkitorgBugzillaUtilpm">trunk/Websites/bugs.webkit.org/Bugzilla/Util.pm</a></li>
<li><a href="#trunkWebsitesbugswebkitorgBugzillaWebServiceBugpm">trunk/Websites/bugs.webkit.org/Bugzilla/WebService/Bug.pm</a></li>
<li><a href="#trunkWebsitesbugswebkitorgBugzillaWebServiceServerJSONRPCpm">trunk/Websites/bugs.webkit.org/Bugzilla/WebService/Server/JSONRPC.pm</a></li>
<li><a href="#trunkWebsitesbugswebkitorgattachmentcgi">trunk/Websites/bugs.webkit.org/attachment.cgi</a></li>
<li><a href="#trunkWebsitesbugswebkitorgbuglistcgi">trunk/Websites/bugs.webkit.org/buglist.cgi</a></li>
<li><a href="#trunkWebsitesbugswebkitorgdocsenxmlBugzillaGuidexml">trunk/Websites/bugs.webkit.org/docs/en/xml/Bugzilla-Guide.xml</a></li>
<li><a href="#trunkWebsitesbugswebkitorgeditflagtypescgi">trunk/Websites/bugs.webkit.org/editflagtypes.cgi</a></li>
<li><a href="#trunkWebsitesbugswebkitorgeditgroupscgi">trunk/Websites/bugs.webkit.org/editgroups.cgi</a></li>
<li><a href="#trunkWebsitesbugswebkitorgpost_bugcgi">trunk/Websites/bugs.webkit.org/post_bug.cgi</a></li>
<li><a href="#trunkWebsitesbugswebkitorgrelogincgi">trunk/Websites/bugs.webkit.org/relogin.cgi</a></li>
<li><a href="#trunkWebsitesbugswebkitorgt002goodperlt">trunk/Websites/bugs.webkit.org/t/002goodperl.t</a></li>
<li><a href="#trunkWebsitesbugswebkitorgtemplateendefaultemailbugmailtxttmpl">trunk/Websites/bugs.webkit.org/template/en/default/email/bugmail.txt.tmpl</a></li>
<li><a href="#trunkWebsitesbugswebkitorgtemplateendefaultfilterexceptionspl">trunk/Websites/bugs.webkit.org/template/en/default/filterexceptions.pl</a></li>
<li><a href="#trunkWebsitesbugswebkitorgtemplateendefaultglobalmessageshtmltmpl">trunk/Websites/bugs.webkit.org/template/en/default/global/messages.html.tmpl</a></li>
<li><a href="#trunkWebsitesbugswebkitorgtemplateendefaultpagesreleasenoteshtmltmpl">trunk/Websites/bugs.webkit.org/template/en/default/pages/release-notes.html.tmpl</a></li>
<li><a href="#trunkWebsitesbugswebkitorgtemplateendefaultreportsreporttablecsvtmpl">trunk/Websites/bugs.webkit.org/template/en/default/reports/report-table.csv.tmpl</a></li>
<li><a href="#trunkWebsitesbugswebkitorgtemplateendefaultrequestemailtxttmpl">trunk/Websites/bugs.webkit.org/template/en/default/request/email.txt.tmpl</a></li>
<li><a href="#trunkWebsitesbugswebkitorgtokencgi">trunk/Websites/bugs.webkit.org/token.cgi</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkWebsitesbugswebkitorggitignore">trunk/Websites/bugs.webkit.org/.gitignore</a></li>
<li><a href="#trunkWebsitesbugswebkitorgtravisyml">trunk/Websites/bugs.webkit.org/.travis.yml</a></li>
<li><a href="#trunkWebsitesbugswebkitorgBuildPL">trunk/Websites/bugs.webkit.org/Build.PL</a></li>
<li><a href="#trunkWebsitesbugswebkitorgMANIFESTSKIP">trunk/Websites/bugs.webkit.org/MANIFEST.SKIP</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkWebsitesbugswebkitorggitignore"></a>
<div class="addfile"><h4>Added: trunk/Websites/bugs.webkit.org/.gitignore (0 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/.gitignore                                (rev 0)
+++ trunk/Websites/bugs.webkit.org/.gitignore        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+.htaccess
+/lib/*
+/template/en/custom
+/docs/bugzilla.ent
+/docs/en/xml/bugzilla.ent
+/docs/en/txt
+/docs/en/html
+/docs/en/pdf
+/skins/custom
+/graphs
+/data
+/localconfig
+/index.html
+
+/skins/contrib/Dusk/IE-fixes.css
+/skins/contrib/Dusk/admin.css
+/skins/contrib/Dusk/attachment.css
+/skins/contrib/Dusk/create_attachment.css
+/skins/contrib/Dusk/dependency-tree.css
+/skins/contrib/Dusk/duplicates.css
+/skins/contrib/Dusk/editusers.css
+/skins/contrib/Dusk/enter_bug.css
+/skins/contrib/Dusk/help.css
+/skins/contrib/Dusk/panel.css
+/skins/contrib/Dusk/page.css
+/skins/contrib/Dusk/params.css
+/skins/contrib/Dusk/reports.css
+/skins/contrib/Dusk/show_bug.css
+/skins/contrib/Dusk/search_form.css
+/skins/contrib/Dusk/show_multiple.css
+/skins/contrib/Dusk/summarize-time.css
+.DS_Store
</ins></span></pre></div>
<a id="trunkWebsitesbugswebkitorgtravisyml"></a>
<div class="addfile"><h4>Added: trunk/Websites/bugs.webkit.org/.travis.yml (0 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/.travis.yml                                (rev 0)
+++ trunk/Websites/bugs.webkit.org/.travis.yml        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+language: perl
+perl:
+  - 5.10
+  - 5.12
+
+env:
+  - TEST_SUITE=sanity
+  - TEST_SUITE=docs
+  - TEST_SUITE=webservices DB=mysql
+  - TEST_SUITE=selenium DB=mysql
+  - TEST_SUITE=webservices DB=pg
+  - TEST_SUITE=selenium DB=pg
+
+matrix:
+  exclude:
+    - perl: 5.12
+      env: TEST_SUITE=docs
+    - perl: 5.10
+      env: TEST_SUITE=webservices DB=mysql
+    - perl: 5.12
+      env: TEST_SUITE=selenium DB=mysql
+    - perl: 5.10
+      env: TEST_SUITE=webservices DB=pg
+    - perl: 5.12
+      env: TEST_SUITE=selenium DB=pg
+
+before_install:
+  - git clone https://github.com/bugzilla/qa.git -b 4.2 qa
+
+install: true
+
+script: ./qa/travis.sh
+
+after_failure:
+  - sudo cat /var/log/apache2/error.log
+
+notifications:
+  irc:
+    channels:
+      - &quot;irc.mozilla.org#qa-bugzilla&quot;
+      - &quot;irc.mozilla.org#bugzilla&quot;
+    template:
+      - &quot;Bugzilla %{branch} : %{author} : %{message}&quot;
+      - &quot;Commit Message : %{commit_message}&quot;
+      - &quot;Commit Link : %{compare_url}&quot;
+      - &quot;Build Link : %{build_url}&quot;
+  on_success: change
+  on_failure: always
</ins></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBugzillaAttachmentpm"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/Bugzilla/Attachment.pm (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Bugzilla/Attachment.pm        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/Bugzilla/Attachment.pm        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -911,10 +911,12 @@
</span><span class="cx">     return 'text/plain' if ($cgi-&gt;param('ispatch') || $cgi-&gt;param('attach_text'));
</span><span class="cx"> 
</span><span class="cx">     my $content_type;
</span><del>-    if (!defined $cgi-&gt;param('contenttypemethod')) {
</del><ins>+    my $method = $cgi-&gt;param('contenttypemethod');
+
+    if (!defined $method) {
</ins><span class="cx">         ThrowUserError(&quot;missing_content_type_method&quot;);
</span><span class="cx">     }
</span><del>-    elsif ($cgi-&gt;param('contenttypemethod') eq 'autodetect') {
</del><ins>+    elsif ($method eq 'autodetect') {
</ins><span class="cx">         defined $cgi-&gt;upload('data') || ThrowUserError('file_not_specified');
</span><span class="cx">         # The user asked us to auto-detect the content type, so use the type
</span><span class="cx">         # specified in the HTTP request headers.
</span><span class="lines">@@ -935,18 +937,17 @@
</span><span class="cx">             $content_type = 'image/png';
</span><span class="cx">         }
</span><span class="cx">     }
</span><del>-    elsif ($cgi-&gt;param('contenttypemethod') eq 'list') {
</del><ins>+    elsif ($method eq 'list') {
</ins><span class="cx">         # The user selected a content type from the list, so use their
</span><span class="cx">         # selection.
</span><span class="cx">         $content_type = $cgi-&gt;param('contenttypeselection');
</span><span class="cx">     }
</span><del>-    elsif ($cgi-&gt;param('contenttypemethod') eq 'manual') {
</del><ins>+    elsif ($method eq 'manual') {
</ins><span class="cx">         # The user entered a content type manually, so use their entry.
</span><span class="cx">         $content_type = $cgi-&gt;param('contenttypeentry');
</span><span class="cx">     }
</span><span class="cx">     else {
</span><del>-        ThrowCodeError(&quot;illegal_content_type_method&quot;,
-                       { contenttypemethod =&gt; $cgi-&gt;param('contenttypemethod') });
</del><ins>+        ThrowCodeError(&quot;illegal_content_type_method&quot;, { contenttypemethod =&gt; $method });
</ins><span class="cx">     }
</span><span class="cx">     return $content_type;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBugzillaAuthPersistCookiepm"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/Bugzilla/Auth/Persist/Cookie.pm (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Bugzilla/Auth/Persist/Cookie.pm        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/Bugzilla/Auth/Persist/Cookie.pm        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -127,7 +127,7 @@
</span><span class="cx">         $login_cookie = $cookie-&gt;value;
</span><span class="cx">     }
</span><span class="cx">     else {
</span><del>-        $login_cookie = $cgi-&gt;cookie(&quot;Bugzilla_logincookie&quot;);
</del><ins>+        $login_cookie = $cgi-&gt;cookie(&quot;Bugzilla_logincookie&quot;) || '';
</ins><span class="cx">     }
</span><span class="cx">     trick_taint($login_cookie);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBugzillaBugpm"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/Bugzilla/Bug.pm (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Bugzilla/Bug.pm        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/Bugzilla/Bug.pm        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -908,12 +908,6 @@
</span><span class="cx">                                    join(', ', @added_names)];
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    # Flags
-    my ($removed, $added) = Bugzilla::Flag-&gt;update_flags($self, $old_bug, $delta_ts);
-    if ($removed || $added) {
-        $changes-&gt;{'flagtypes.name'} = [$removed, $added];
-    }
-
</del><span class="cx">     # Comments
</span><span class="cx">     foreach my $comment (@{$self-&gt;{added_comments} || []}) {
</span><span class="cx">         # Override the Comment's timestamp to be identical to the update
</span><span class="lines">@@ -936,6 +930,9 @@
</span><span class="cx">                          Bugzilla-&gt;user-&gt;id, $delta_ts, $comment-&gt;id);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    # Clear the cache of comments
+    delete $self-&gt;{comments};
+
</ins><span class="cx">     # Insert the values into the multiselect value tables
</span><span class="cx">     my @multi_selects = grep {$_-&gt;type == FIELD_TYPE_MULTI_SELECT}
</span><span class="cx">                              Bugzilla-&gt;active_custom_fields;
</span><span class="lines">@@ -971,6 +968,12 @@
</span><span class="cx">     $_-&gt;update foreach @{ $self-&gt;{_update_ref_bugs} || [] };
</span><span class="cx">     delete $self-&gt;{_update_ref_bugs};
</span><span class="cx"> 
</span><ins>+    # Flags
+    my ($removed, $added) = Bugzilla::Flag-&gt;update_flags($self, $old_bug, $delta_ts);
+    if ($removed || $added) {
+        $changes-&gt;{'flagtypes.name'} = [$removed, $added];
+    }
+
</ins><span class="cx">     # Log bugs_activity items
</span><span class="cx">     # XXX Eventually, when bugs_activity is able to track the dupe_id,
</span><span class="cx">     # this code should go below the duplicates-table-updating code below.
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBugzillaChartpm"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/Bugzilla/Chart.pm (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Bugzilla/Chart.pm        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/Bugzilla/Chart.pm        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -110,10 +110,9 @@
</span><span class="cx">     if ($self-&gt;{'datefrom'} &amp;&amp; $self-&gt;{'dateto'} &amp;&amp; 
</span><span class="cx">         $self-&gt;{'datefrom'} &gt; $self-&gt;{'dateto'}) 
</span><span class="cx">     {
</span><del>-          ThrowUserError(&quot;misarranged_dates&quot;, 
-                                         {'datefrom' =&gt; $cgi-&gt;param('datefrom'),
-                                          'dateto' =&gt; $cgi-&gt;param('dateto')});
-    }    
</del><ins>+          ThrowUserError('misarranged_dates', { 'datefrom' =&gt; scalar $cgi-&gt;param('datefrom'),
+                                                'dateto' =&gt; scalar $cgi-&gt;param('dateto') });
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> # Alter Chart so that the selected series are added to it.
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBugzillaConstantspm"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/Bugzilla/Constants.pm (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Bugzilla/Constants.pm        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/Bugzilla/Constants.pm        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -203,7 +203,7 @@
</span><span class="cx"> # CONSTANTS
</span><span class="cx"> #
</span><span class="cx"> # Bugzilla version
</span><del>-use constant BUGZILLA_VERSION =&gt; &quot;4.2.7&quot;;
</del><ins>+use constant BUGZILLA_VERSION =&gt; &quot;4.2.11&quot;;
</ins><span class="cx"> 
</span><span class="cx"> # Location of the remote and local XML files to track new releases.
</span><span class="cx"> use constant REMOTE_FILE =&gt; 'http://updates.bugzilla.org/bugzilla-update.xml';
</span><span class="lines">@@ -604,6 +604,13 @@
</span><span class="cx"> use constant AUDIT_REMOVE =&gt; '__remove__';
</span><span class="cx"> 
</span><span class="cx"> sub bz_locations {
</span><ins>+    # Force memoize() to re-compute data per project, to avoid
+    # sharing the same data across different installations.
+    return _bz_locations($ENV{'PROJECT'});
+}
+
+sub _bz_locations {
+    my $project = shift;
</ins><span class="cx">     # We know that Bugzilla/Constants.pm must be in %INC at this point.
</span><span class="cx">     # So the only question is, what's the name of the directory
</span><span class="cx">     # above it? This is the most reliable way to get our current working
</span><span class="lines">@@ -620,12 +627,13 @@
</span><span class="cx">     $libpath =~ /(.*)/;
</span><span class="cx">     $libpath = $1;
</span><span class="cx"> 
</span><del>-    my ($project, $localconfig, $datadir);
-    if ($ENV{'PROJECT'} &amp;&amp; $ENV{'PROJECT'} =~ /^(\w+)$/) {
</del><ins>+    my ($localconfig, $datadir);
+    if ($project &amp;&amp; $project =~ /^(\w+)$/) {
</ins><span class="cx">         $project = $1;
</span><span class="cx">         $localconfig = &quot;localconfig.$project&quot;;
</span><span class="cx">         $datadir = &quot;data/$project&quot;;
</span><span class="cx">     } else {
</span><ins>+        $project = undef;
</ins><span class="cx">         $localconfig = &quot;localconfig&quot;;
</span><span class="cx">         $datadir = &quot;data&quot;;
</span><span class="cx">     }
</span><span class="lines">@@ -660,6 +668,6 @@
</span><span class="cx"> 
</span><span class="cx"> # This makes us not re-compute all the bz_locations data every time it's
</span><span class="cx"> # called.
</span><del>-BEGIN { memoize('bz_locations') };
</del><ins>+BEGIN { memoize('_bz_locations') };
</ins><span class="cx"> 
</span><span class="cx"> 1;
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBugzillaDBSqlitepm"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/Bugzilla/DB/Sqlite.pm (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Bugzilla/DB/Sqlite.pm        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/Bugzilla/DB/Sqlite.pm        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -226,7 +226,7 @@
</span><span class="cx"> 
</span><span class="cx"> sub sql_date_format {
</span><span class="cx">     my ($self, $date, $format) = @_;
</span><del>-    $format = &quot;%Y.%m.%d %H:%M:%s&quot; if !$format;
</del><ins>+    $format = &quot;%Y.%m.%d %H:%M:%S&quot; if !$format;
</ins><span class="cx">     $format =~ s/\%i/\%M/g;
</span><span class="cx">     return &quot;STRFTIME(&quot; . $self-&gt;quote($format) . &quot;, $date)&quot;;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBugzillaFlagpm"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/Bugzilla/Flag.pm (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Bugzilla/Flag.pm        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/Bugzilla/Flag.pm        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -975,19 +975,33 @@
</span><span class="cx">         $default_lang = Bugzilla::User-&gt;new()-&gt;setting('lang');
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    # Get comments on the bug
+    my $all_comments = $bug-&gt;comments({ after =&gt; $bug-&gt;lastdiffed });
+    @$all_comments   = grep { $_-&gt;type || $_-&gt;body =~ /\S/ } @$all_comments;
+
+    # Get public only comments
+    my $public_comments = [ grep { !$_-&gt;is_private } @$all_comments ];
+
</ins><span class="cx">     foreach my $to (keys %recipients) {
</span><span class="cx">         # Add threadingmarker to allow flag notification emails to be the
</span><span class="cx">         # threaded similar to normal bug change emails.
</span><span class="cx">         my $thread_user_id = $recipients{$to} ? $recipients{$to}-&gt;id : 0;
</span><span class="cx"> 
</span><del>-        my $vars = { 'flag'            =&gt; $flag,
-                     'old_flag'        =&gt; $old_flag,
-                     'to'              =&gt; $to,
-                     'date'            =&gt; $timestamp,
-                     'bug'             =&gt; $bug,
-                     'attachment'      =&gt; $attachment,
-                     'threadingmarker' =&gt; build_thread_marker($bug-&gt;id, $thread_user_id) };
</del><ins>+        # We only want to show private comments to users in the is_insider group
+        my $comments = $recipients{$to} &amp;&amp; $recipients{$to}-&gt;is_insider
+            ? $all_comments : $public_comments;
</ins><span class="cx"> 
</span><ins>+        my $vars = {
+            flag            =&gt; $flag,
+            old_flag        =&gt; $old_flag,
+            to              =&gt; $to,
+            date            =&gt; $timestamp,
+            bug             =&gt; $bug,
+            attachment      =&gt; $attachment,
+            threadingmarker =&gt; build_thread_marker($bug-&gt;id, $thread_user_id),
+            new_comments    =&gt; $comments,
+        };
+
</ins><span class="cx">         my $lang = $recipients{$to} ?
</span><span class="cx">           $recipients{$to}-&gt;setting('lang') : $default_lang;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBugzillaInstallRequirementspm"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/Bugzilla/Install/Requirements.pm (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Bugzilla/Install/Requirements.pm        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/Bugzilla/Install/Requirements.pm        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -24,6 +24,7 @@
</span><span class="cx"> # MUST NOT &quot;use.&quot;
</span><span class="cx"> 
</span><span class="cx"> use strict;
</span><ins>+use version;
</ins><span class="cx"> 
</span><span class="cx"> use Bugzilla::Constants;
</span><span class="cx"> use Bugzilla::Install::Util qw(vers_cmp install_string bin_loc 
</span><span class="lines">@@ -206,7 +207,9 @@
</span><span class="cx">         package =&gt; 'Chart',
</span><span class="cx">         module  =&gt; 'Chart::Lines',
</span><span class="cx">         # Versions below 2.1 cannot be detected accurately.
</span><del>-        version =&gt; '2.1',
</del><ins>+        # There is no 2.1.0 release (it was 2.1), but .0 is required to fix
+        # https://rt.cpan.org/Public/Bug/Display.html?id=28218.
+        version =&gt; '2.1.0',
</ins><span class="cx">         feature =&gt; [qw(new_charts old_charts)],
</span><span class="cx">     },
</span><span class="cx">     {
</span><span class="lines">@@ -640,8 +643,8 @@
</span><span class="cx">     return $return;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-# This was originally clipped from the libnet Makefile.PL, adapted here to
-# use the below vers_cmp routine for accurate version checking.
</del><ins>+# This was originally clipped from the libnet Makefile.PL, adapted here for
+# accurate version checking.
</ins><span class="cx"> sub have_vers {
</span><span class="cx">     my ($params, $output) = @_;
</span><span class="cx">     my $module  = $params-&gt;{module};
</span><span class="lines">@@ -659,21 +662,24 @@
</span><span class="cx">     Bugzilla::Install::Util::set_output_encoding();
</span><span class="cx"> 
</span><span class="cx">     # VERSION is provided by UNIVERSAL::, and can be called even if
</span><del>-    # the module isn't loaded.
-    my $vnum = $module-&gt;VERSION || -1;
</del><ins>+    # the module isn't loaded. We eval'uate -&gt;VERSION because it can die
+    # when the version is not valid (yes, this happens from time to time).
+    # In that case, we use an uglier method to get the version.
+    my $vnum = eval { $module-&gt;VERSION };
+    if ($@) {
+        no strict 'refs';
+        $vnum = ${&quot;${module}::VERSION&quot;};
</ins><span class="cx"> 
</span><del>-    # CGI's versioning scheme went 2.75, 2.751, 2.752, 2.753, 2.76
-    # That breaks the standard version tests, so we need to manually correct
-    # the version
-    if ($module eq 'CGI' &amp;&amp; $vnum =~ /(2\.7\d)(\d+)/) {
-        $vnum = $1 . &quot;.&quot; . $2;
</del><ins>+        # If we come here, then the version is not a valid one.
+        # We try to sanitize it.
+        if ($vnum =~ /^((\d+)(\.\d+)*)/) {
+            $vnum = $1;
+        }
</ins><span class="cx">     }
</span><del>-    # CPAN did a similar thing, where it has versions like 1.9304.
-    if ($module eq 'CPAN' and $vnum =~ /^(\d\.\d{2})\d{2}$/) {
-        $vnum = $1;
-    }
</del><ins>+    $vnum ||= -1;
</ins><span class="cx"> 
</span><del>-    my $vok = (vers_cmp($vnum,$wanted) &gt; -1);
</del><ins>+    # Must do a string comparison as $vnum may be of the form 5.10.1.
+    my $vok = ($vnum ne '-1' &amp;&amp; version-&gt;new($vnum) &gt;= version-&gt;new($wanted)) ? 1 : 0;
</ins><span class="cx">     my $blacklisted;
</span><span class="cx">     if ($vok &amp;&amp; $params-&gt;{blacklist}) {
</span><span class="cx">         $blacklisted = grep($vnum =~ /$_/, @{$params-&gt;{blacklist}});
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBugzillaTemplatepm"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/Bugzilla/Template.pm (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Bugzilla/Template.pm        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/Bugzilla/Template.pm        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -162,14 +162,12 @@
</span><span class="cx">     # (http://foo/bug#3 for example). Filtering that out filters valid
</span><span class="cx">     # bug refs out, so we have to do replacements.
</span><span class="cx">     # mailto can't contain space or #, so we don't have to bother for that
</span><del>-    # Do this by escaping \0 to \1\0, and replacing matches with \0\0$count\0\0
-    # \0 is used because it's unlikely to occur in the text, so the cost of
-    # doing this should be very small
</del><ins>+    # Do this by replacing matches with \x{FDD2}$count\x{FDD3}
+    # \x{FDDx} is used because it's unlikely to occur in the text
+    # and are reserved unicode characters. We disable warnings for now
+    # until we require Perl 5.13.9 or newer.
+    no warnings 'utf8';
</ins><span class="cx"> 
</span><del>-    # escape the 2nd escape char we're using
-    my $chr1 = chr(1);
-    $text =~ s/\0/$chr1\0/g;
-
</del><span class="cx">     # However, note that adding the title (for buglinks) can affect things
</span><span class="cx">     # In particular, attachment matches go before bug titles, so that titles
</span><span class="cx">     # with 'attachment 1' don't double match.
</span><span class="lines">@@ -195,11 +193,11 @@
</span><span class="cx">                                                                $1, $2, $3, $4,
</span><span class="cx">                                                                $5, $6, $7, $8, 
</span><span class="cx">                                                                $9, $10]}))
</span><del>-                               &amp;&amp; (&quot;\0\0&quot; . ($count-1) . &quot;\0\0&quot;)/egx;
</del><ins>+                               &amp;&amp; (&quot;\x{FDD2}&quot; . ($count-1) . &quot;\x{FDD3}&quot;)/egx;
</ins><span class="cx">         }
</span><span class="cx">         else {
</span><span class="cx">             $text =~ s/$match/($things[$count++] = $replace) 
</span><del>-                              &amp;&amp; (&quot;\0\0&quot; . ($count-1) . &quot;\0\0&quot;)/egx;
</del><ins>+                              &amp;&amp; (&quot;\x{FDD2}&quot; . ($count-1) . &quot;\x{FDD3}&quot;)/egx;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -209,7 +207,7 @@
</span><span class="cx">                             Bugzilla-&gt;params-&gt;{'sslbase'})) . ')';
</span><span class="cx">     $text =~ s~\b(${urlbase_re}\Qshow_bug.cgi?id=\E([0-9]+)(\#c([0-9]+))?)\b
</span><span class="cx">               ~($things[$count++] = get_bug_link($3, $1, { comment_num =&gt; $5, user =&gt; $user })) &amp;&amp;
</span><del>-               (&quot;\0\0&quot; . ($count-1) . &quot;\0\0&quot;)
</del><ins>+               (&quot;\x{FDD2}&quot; . ($count-1) . &quot;\x{FDD3}&quot;)
</ins><span class="cx">               ~egox;
</span><span class="cx"> 
</span><span class="cx">     # non-mailto protocols
</span><span class="lines">@@ -217,7 +215,7 @@
</span><span class="cx">     $text =~ s~\b($safe_protocols)
</span><span class="cx">               ~($tmp = html_quote($1)) &amp;&amp;
</span><span class="cx">                ($things[$count++] = &quot;&lt;a href=\&quot;$tmp\&quot;&gt;$tmp&lt;/a&gt;&quot;) &amp;&amp;
</span><del>-               (&quot;\0\0&quot; . ($count-1) . &quot;\0\0&quot;)
</del><ins>+               (&quot;\x{FDD2}&quot; . ($count-1) . &quot;\x{FDD3}&quot;)
</ins><span class="cx">               ~egox;
</span><span class="cx"> 
</span><span class="cx">     # We have to quote now, otherwise the html itself is escaped
</span><span class="lines">@@ -238,7 +236,7 @@
</span><span class="cx">     # attachment links
</span><span class="cx">     $text =~ s~\b(attachment\s*\#?\s*(\d+)(?:\s+\[details\])?)
</span><span class="cx">               ~($things[$count++] = get_attachment_link($2, $1, $user)) &amp;&amp;
</span><del>-               (&quot;\0\0&quot; . ($count-1) . &quot;\0\0&quot;)
</del><ins>+               (&quot;\x{FDD2}&quot; . ($count-1) . &quot;\x{FDD3}&quot;)
</ins><span class="cx">               ~egmxi;
</span><span class="cx"> 
</span><span class="cx">     # Current bug ID this comment belongs to
</span><span class="lines">@@ -268,9 +266,8 @@
</span><span class="cx"> 
</span><span class="cx">     # Now remove the encoding hacks in reverse order
</span><span class="cx">     for (my $i = $#things; $i &gt;= 0; $i--) {
</span><del>-        $text =~ s/\0\0($i)\0\0/$things[$i]/eg;
</del><ins>+        $text =~ s/\x{FDD2}($i)\x{FDD3}/$things[$i]/eg;
</ins><span class="cx">     }
</span><del>-    $text =~ s/$chr1\0/\0/g;
</del><span class="cx"> 
</span><span class="cx">     return $text;
</span><span class="cx"> }
</span><span class="lines">@@ -672,6 +669,17 @@
</span><span class="cx">                 my ($data) = @_;
</span><span class="cx">                 return encode_base64($data);
</span><span class="cx">             },
</span><ins>+
+            # Strips out control characters excepting whitespace
+            strip_control_chars =&gt; sub {
+                my ($data) = @_;
+                # Only run for utf8 to avoid issues with other multibyte encodings 
+                # that may be reassigning meaning to ascii characters.
+                if (Bugzilla-&gt;params-&gt;{'utf8'}) {
+                    $data =~ s/(?![\t\r\n])[[:cntrl:]]//g;
+                }
+                return $data;
+            },
</ins><span class="cx">             
</span><span class="cx">             # HTML collapses newlines in element attributes to a single space,
</span><span class="cx">             # so form elements which may have whitespace (ie comments) need
</span><span class="lines">@@ -730,10 +738,12 @@
</span><span class="cx">             },
</span><span class="cx"> 
</span><span class="cx">             # In CSV, quotes are doubled, and any value containing a quote or a
</span><del>-            # comma is enclosed in quotes.
</del><ins>+            # comma is enclosed in quotes. If a field starts with an equals
+            # sign, it is proceed by a space.
</ins><span class="cx">             csv =&gt; sub
</span><span class="cx">             {
</span><span class="cx">                 my ($var) = @_;
</span><ins>+                $var = ' ' . $var if substr($var, 0, 1) eq '=';
</ins><span class="cx">                 $var =~ s/\&quot;/\&quot;\&quot;/g;
</span><span class="cx">                 if ($var !~ /^-?(\d+\.)?\d*$/) {
</span><span class="cx">                     $var = &quot;\&quot;$var\&quot;&quot;;
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBugzillaUtilpm"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/Bugzilla/Util.pm (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Bugzilla/Util.pm        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/Bugzilla/Util.pm        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -91,6 +91,10 @@
</span><span class="cx">     # Obscure '@'.
</span><span class="cx">     $var =~ s/\@/\&amp;#64;/g;
</span><span class="cx">     if (Bugzilla-&gt;params-&gt;{'utf8'}) {
</span><ins>+        # Remove control characters if the encoding is utf8.
+        # Other multibyte encodings may be using this range; so ignore if not utf8.
+        $var =~ s/(?![\t\r\n])[[:cntrl:]]//g;
+
</ins><span class="cx">         # Remove the following characters because they're
</span><span class="cx">         # influencing BiDi:
</span><span class="cx">         # --------------------------------------------------------
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBugzillaWebServiceBugpm"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/Bugzilla/WebService/Bug.pm (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Bugzilla/WebService/Bug.pm        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/Bugzilla/WebService/Bug.pm        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -2037,7 +2037,7 @@
</span><span class="cx"> =item C&lt;summary&gt; (string) B&lt;Required&gt; - A string of keywords defining
</span><span class="cx"> the type of bug you are trying to report.
</span><span class="cx"> 
</span><del>-=item C&lt;products&gt; (array) - One or more product names to narrow the
</del><ins>+=item C&lt;product&gt; (array) - One or more product names to narrow the
</ins><span class="cx"> duplicate search to. If omitted, all bugs are searched.
</span><span class="cx"> 
</span><span class="cx"> =back
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBugzillaWebServiceServerJSONRPCpm"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/Bugzilla/WebService/Server/JSONRPC.pm (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Bugzilla/WebService/Server/JSONRPC.pm        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/Bugzilla/WebService/Server/JSONRPC.pm        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -91,8 +91,9 @@
</span><span class="cx">     # Implement JSONP.
</span><span class="cx">     if (my $callback = $self-&gt;_bz_callback) {
</span><span class="cx">         my $content = $response-&gt;content;
</span><del>-        $response-&gt;content(&quot;$callback($content)&quot;);
-
</del><ins>+        # Prepend the JSONP response with /**/ in order to protect
+        # against possible encoding attacks (e.g., affecting Flash).
+        $response-&gt;content(&quot;/**/$callback($content)&quot;);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     # Use $cgi-&gt;header properly instead of just printing text directly.
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgBuildPL"></a>
<div class="addfile"><h4>Added: trunk/Websites/bugs.webkit.org/Build.PL (0 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/Build.PL                                (rev 0)
+++ trunk/Websites/bugs.webkit.org/Build.PL        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -0,0 +1,61 @@
</span><ins>+#!/usr/bin/perl
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This Source Code Form is &quot;Incompatible With Secondary Licenses&quot;, as
+# defined by the Mozilla Public License, v. 2.0.
+
+use 5.10.1;
+use strict;
+use warnings;
+
+use FindBin qw($RealBin);
+use lib ($RealBin, &quot;$RealBin/lib&quot;);
+
+use Module::Build 0.36_14;
+
+use Bugzilla::Install::Requirements qw(REQUIRED_MODULES OPTIONAL_MODULES);
+use Bugzilla::Constants qw(BUGZILLA_VERSION);
+
+sub requires {
+    my $requirements = REQUIRED_MODULES();
+    my $hrequires = {};
+    foreach my $module (@$requirements) {
+        $hrequires-&gt;{$module-&gt;{module}} = $module-&gt;{version};
+    }
+    return $hrequires;
+};
+
+sub build_requires {
+    return requires();
+}
+
+sub recommends {
+    my $recommends = OPTIONAL_MODULES();
+    my @blacklist = ('Apache-SizeLimit', 'mod_perl'); # Does not compile properly on Travis
+    my $hrecommends = {};
+    foreach my $module (@$recommends) {
+        next if grep($_ eq $module-&gt;{package}, @blacklist);
+        $hrecommends-&gt;{$module-&gt;{module}} = $module-&gt;{version};
+    }
+    return $hrecommends;
+}
+
+my $build = Module::Build-&gt;new(
+    module_name        =&gt; 'Bugzilla',
+    dist_abstract      =&gt; &lt;&lt;END,
+Bugzilla is a free bug-tracking system that is developed by an active
+community of volunteers. You can install and use it without having to
+pay any license fee.
+END
+    dist_version_from  =&gt; 'Bugzilla/Constants.pm',
+    dist_version       =&gt; BUGZILLA_VERSION,
+    requires           =&gt; requires(),
+    recommends         =&gt; recommends(),
+    license            =&gt; 'Mozilla_2_0',
+    create_readme      =&gt; 0,
+    create_makefile_pl =&gt; 0
+);
+
+$build-&gt;create_build_script;
</ins></span></pre></div>
<a id="trunkWebsitesbugswebkitorgMANIFESTSKIP"></a>
<div class="addfile"><h4>Added: trunk/Websites/bugs.webkit.org/MANIFEST.SKIP (0 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/MANIFEST.SKIP                                (rev 0)
+++ trunk/Websites/bugs.webkit.org/MANIFEST.SKIP        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This Source Code Form is &quot;Incompatible With Secondary Licenses&quot;, as
+# defined by the Mozilla Public License, v. 2.0.
+
+#!start included /usr/share/perl5/ExtUtils/MANIFEST.SKIP
+# Avoid version control files.
+\B\.git\b
+\B\.bzr\b
+\B\.bzrignore\b
+\B\.gitignore\b
+\B\.gitrev\b
+\B\.patch\b
+
+# Avoid Makemaker generated and utility files.
+\bMANIFEST\.bak
+\bMakefile$
+\bblib/
+\bMakeMaker-\d
+\bpm_to_blib\.ts$
+\bpm_to_blib$
+\bblibdirs\.ts$         # 6.18 through 6.25 generated this
+
+# Avoid Module::Build generated and utility files.
+\bBuild$
+\b_build/
+
+# Avoid temp and backup files.
+~$
+\.old$
+\#$
+\b\.#
+\.bak$
+\.swp$
+
+#!end included /usr/share/perl5/ExtUtils/MANIFEST.SKIP
+
+# Avoid Module::Build generated and utility files.
+\bBuild$
+\bBuild.bat$
+\b_build
+\bBuild.COM$
+\bBUILD.COM$
+\bbuild.com$
+
+# Avoid archives of this distribution
+\bBugzilla-[\d\.\_]+
+
+# Bugzilla specific avoids
+\bdata\/\b
+\blocalconfig$
</ins></span></pre></div>
<a id="trunkWebsitesbugswebkitorgattachmentcgi"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/attachment.cgi (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/attachment.cgi        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/attachment.cgi        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -248,8 +248,9 @@
</span><span class="cx"> {
</span><span class="cx">   my $context = $cgi-&gt;param('context') || &quot;patch&quot;;
</span><span class="cx">   if ($context ne &quot;file&quot; &amp;&amp; $context ne &quot;patch&quot;) {
</span><del>-    detaint_natural($context)
-      || ThrowUserError(&quot;invalid_context&quot;, { context =&gt; $cgi-&gt;param('context') });
</del><ins>+      my $orig_context = $context;
+      detaint_natural($context)
+        || ThrowUserError(&quot;invalid_context&quot;, { context =&gt; $orig_context });
</ins><span class="cx">   }
</span><span class="cx"> 
</span><span class="cx">   return $context;
</span><span class="lines">@@ -591,13 +592,14 @@
</span><span class="cx"> 
</span><span class="cx">     # Get the filehandle of the attachment.
</span><span class="cx">     my $data_fh = $cgi-&gt;upload('data');
</span><ins>+    my $attach_text = $cgi-&gt;param('attach_text');
</ins><span class="cx"> 
</span><span class="cx">     my $attachment = Bugzilla::Attachment-&gt;create(
</span><span class="cx">         {bug           =&gt; $bug,
</span><span class="cx">          creation_ts   =&gt; $timestamp,
</span><del>-         data          =&gt; scalar $cgi-&gt;param('attach_text') || $data_fh,
</del><ins>+         data          =&gt; $attach_text || $data_fh,
</ins><span class="cx">          description   =&gt; scalar $cgi-&gt;param('description'),
</span><del>-         filename      =&gt; $cgi-&gt;param('attach_text') ? &quot;file_$bugid.txt&quot; : scalar $cgi-&gt;upload('data'),
</del><ins>+         filename      =&gt; $attach_text ? &quot;file_$bugid.txt&quot; : $data_fh,
</ins><span class="cx">          ispatch       =&gt; scalar $cgi-&gt;param('ispatch'),
</span><span class="cx">          isprivate     =&gt; scalar $cgi-&gt;param('isprivate'),
</span><span class="cx">          mimetype      =&gt; $content_type,
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgbuglistcgi"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/buglist.cgi (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/buglist.cgi        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/buglist.cgi        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -1014,7 +1014,7 @@
</span><span class="cx"> # This is used in the &quot;Zarroo Boogs&quot; case.
</span><span class="cx"> elsif (my @product_input = $cgi-&gt;param('product')) {
</span><span class="cx">     if (scalar(@product_input) == 1 and $product_input[0] ne '') {
</span><del>-        $one_product = new Bugzilla::Product({ name =&gt; $cgi-&gt;param('product') });
</del><ins>+        $one_product = new Bugzilla::Product({ name =&gt; $product_input[0] });
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> # We only want the template to use it if the user can actually 
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgdocsenxmlBugzillaGuidexml"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/docs/en/xml/Bugzilla-Guide.xml (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/docs/en/xml/Bugzilla-Guide.xml        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/docs/en/xml/Bugzilla-Guide.xml        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -32,10 +32,10 @@
</span><span class="cx">      For a devel release, simple bump bz-ver and bz-date
</span><span class="cx"> --&gt;
</span><span class="cx"> 
</span><del>-&lt;!ENTITY bz-ver &quot;4.2.7&quot;&gt;
</del><ins>+&lt;!ENTITY bz-ver &quot;4.2.11&quot;&gt;
</ins><span class="cx"> &lt;!ENTITY bz-nextver &quot;4.4&quot;&gt;
</span><del>-&lt;!ENTITY bz-date &quot;2013-10-16&quot;&gt;
-&lt;!ENTITY current-year &quot;2013&quot;&gt;
</del><ins>+&lt;!ENTITY bz-date &quot;2014-10-06&quot;&gt;
+&lt;!ENTITY current-year &quot;2014&quot;&gt;
</ins><span class="cx"> 
</span><span class="cx"> &lt;!ENTITY landfillbase &quot;http://landfill.bugzilla.org/bugzilla-4.2-branch/&quot;&gt;
</span><span class="cx"> &lt;!ENTITY bz &quot;http://www.bugzilla.org/&quot;&gt;
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgeditflagtypescgi"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/editflagtypes.cgi (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/editflagtypes.cgi        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/editflagtypes.cgi        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -59,23 +59,24 @@
</span><span class="cx"> 
</span><span class="cx"> my $action = $cgi-&gt;param('action') || 'list';
</span><span class="cx"> my $token  = $cgi-&gt;param('token');
</span><del>-my $product = $cgi-&gt;param('product');
-my $component = $cgi-&gt;param('component');
</del><ins>+my $prod_name = $cgi-&gt;param('product');
+my $comp_name = $cgi-&gt;param('component');
</ins><span class="cx"> my $flag_id = $cgi-&gt;param('id');
</span><span class="cx"> 
</span><del>-if ($product) {
</del><ins>+my ($product, $component);
+
+if ($prod_name) {
</ins><span class="cx">     # Make sure the user is allowed to view this product name.
</span><span class="cx">     # Users with global editcomponents privs can see all product names.
</span><del>-    ($product) = grep { lc($_-&gt;name) eq lc($product) } @products;
-    $product || ThrowUserError('product_access_denied', { name =&gt; $cgi-&gt;param('product') });
</del><ins>+    ($product) = grep { lc($_-&gt;name) eq lc($prod_name) } @products;
+    $product || ThrowUserError('product_access_denied', { name =&gt; $prod_name });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-if ($component) {
-    ($product &amp;&amp; $product-&gt;id)
-      || ThrowUserError('flag_type_component_without_product');
-    ($component) = grep { lc($_-&gt;name) eq lc($component) } @{$product-&gt;components};
</del><ins>+if ($comp_name) {
+    $product || ThrowUserError('flag_type_component_without_product');
+    ($component) = grep { lc($_-&gt;name) eq lc($comp_name) } @{$product-&gt;components};
</ins><span class="cx">     $component || ThrowUserError('product_unknown_component', { product =&gt; $product-&gt;name,
</span><del>-                                                                comp =&gt; $cgi-&gt;param('component') });
</del><ins>+                                                                comp =&gt; $comp_name });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> # If 'categoryAction' is set, it has priority over 'action'.
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgeditgroupscgi"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/editgroups.cgi (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/editgroups.cgi        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/editgroups.cgi        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -242,7 +242,7 @@
</span><span class="cx"> 
</span><span class="cx"> if ($action eq 'del') {
</span><span class="cx">     # Check that an existing group ID is given
</span><del>-    my $group = Bugzilla::Group-&gt;check({ id =&gt; $cgi-&gt;param('group') });
</del><ins>+    my $group = Bugzilla::Group-&gt;check({ id =&gt; scalar $cgi-&gt;param('group') });
</ins><span class="cx">     $group-&gt;check_remove({ test_only =&gt; 1 });
</span><span class="cx">     $vars-&gt;{'shared_queries'} =
</span><span class="cx">         $dbh-&gt;selectrow_array('SELECT COUNT(*)
</span><span class="lines">@@ -266,7 +266,7 @@
</span><span class="cx"> if ($action eq 'delete') {
</span><span class="cx">     check_token_data($token, 'delete_group');
</span><span class="cx">     # Check that an existing group ID is given
</span><del>-    my $group = Bugzilla::Group-&gt;check({ id =&gt; $cgi-&gt;param('group') });
</del><ins>+    my $group = Bugzilla::Group-&gt;check({ id =&gt; scalar $cgi-&gt;param('group') });
</ins><span class="cx">     $vars-&gt;{'name'} = $group-&gt;name;
</span><span class="cx">     $group-&gt;remove_from_db({
</span><span class="cx">         remove_from_users =&gt; scalar $cgi-&gt;param('removeusers'),
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgpost_bugcgi"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/post_bug.cgi (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/post_bug.cgi        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/post_bug.cgi        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -168,7 +168,10 @@
</span><span class="cx"> # after the bug is filed.
</span><span class="cx"> 
</span><span class="cx"> # Add an attachment if requested.
</span><del>-if (defined($cgi-&gt;upload('data')) || $cgi-&gt;param('attach_text')) {
</del><ins>+my $data_fh = $cgi-&gt;upload('data');
+my $attach_text = $cgi-&gt;param('attach_text');
+
+if ($data_fh || $attach_text) {
</ins><span class="cx">     $cgi-&gt;param('isprivate', $cgi-&gt;param('comment_is_private'));
</span><span class="cx"> 
</span><span class="cx">     # Must be called before create() as it may alter $cgi-&gt;param('ispatch').
</span><span class="lines">@@ -183,9 +186,9 @@
</span><span class="cx">         $attachment = Bugzilla::Attachment-&gt;create(
</span><span class="cx">             {bug           =&gt; $bug,
</span><span class="cx">              creation_ts   =&gt; $timestamp,
</span><del>-             data          =&gt; scalar $cgi-&gt;param('attach_text') || $cgi-&gt;upload('data'),
</del><ins>+             data          =&gt; $attach_text || $data_fh,
</ins><span class="cx">              description   =&gt; scalar $cgi-&gt;param('description'),
</span><del>-             filename      =&gt; $cgi-&gt;param('attach_text') ? &quot;file_$id.txt&quot; : scalar $cgi-&gt;upload('data'),
</del><ins>+             filename      =&gt; $attach_text ? &quot;file_$id.txt&quot; : $data_fh,
</ins><span class="cx">              ispatch       =&gt; scalar $cgi-&gt;param('ispatch'),
</span><span class="cx">              isprivate     =&gt; scalar $cgi-&gt;param('isprivate'),
</span><span class="cx">              mimetype      =&gt; $content_type,
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgrelogincgi"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/relogin.cgi (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/relogin.cgi        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/relogin.cgi        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -87,19 +87,21 @@
</span><span class="cx">     {
</span><span class="cx">         $credentials_provided = 1;
</span><span class="cx">     }
</span><del>-    
</del><ins>+
</ins><span class="cx">     # Next, log in the user
</span><span class="cx">     my $user = Bugzilla-&gt;login(LOGIN_REQUIRED);
</span><del>-    
</del><ins>+
+    my $target_login = $cgi-&gt;param('target_login');
+    my $reason = $cgi-&gt;param('reason') || '';
+
</ins><span class="cx">     # At this point, the user is logged in.  However, if they used a method
</span><span class="cx">     # where they could have provided a username/password (i.e. CGI), but they 
</span><span class="cx">     # did not provide a username/password, then throw an error.
</span><span class="cx">     if ($user-&gt;authorizer-&gt;can_login &amp;&amp; !$credentials_provided) {
</span><span class="cx">         ThrowUserError('sudo_password_required',
</span><del>-                       { target_login =&gt; $cgi-&gt;param('target_login'),
-                               reason =&gt; $cgi-&gt;param('reason')});
</del><ins>+                       { target_login =&gt; $target_login, reason =&gt; $reason });
</ins><span class="cx">     }
</span><del>-    
</del><ins>+
</ins><span class="cx">     # The user must be in the 'bz_sudoers' group
</span><span class="cx">     unless ($user-&gt;in_group('bz_sudoers')) {
</span><span class="cx">         ThrowUserError('auth_failure', {  group =&gt; 'bz_sudoers',
</span><span class="lines">@@ -123,30 +125,22 @@
</span><span class="cx">             &amp;&amp; ($token_data eq 'sudo_prepared'))
</span><span class="cx">     {
</span><span class="cx">         ThrowUserError('sudo_preparation_required', 
</span><del>-                       { target_login =&gt; scalar $cgi-&gt;param('target_login'),
-                               reason =&gt; scalar $cgi-&gt;param('reason')});
</del><ins>+                       { target_login =&gt; $target_login, reason =&gt; $reason });
</ins><span class="cx">     }
</span><span class="cx">     delete_token($cgi-&gt;param('token'));
</span><span class="cx"> 
</span><span class="cx">     # Get &amp; verify the target user (the user who we will be impersonating)
</span><del>-    my $target_user = 
-        new Bugzilla::User({ name =&gt; $cgi-&gt;param('target_login') });
</del><ins>+    my $target_user = new Bugzilla::User({ name =&gt; $target_login });
</ins><span class="cx">     unless (defined($target_user)
</span><span class="cx">             &amp;&amp; $target_user-&gt;id
</span><span class="cx">             &amp;&amp; $user-&gt;can_see_user($target_user))
</span><span class="cx">     {
</span><del>-        ThrowUserError('user_match_failed',
-                       { 'name' =&gt; $cgi-&gt;param('target_login') }
-        );
</del><ins>+        ThrowUserError('user_match_failed', { name =&gt; $target_login });
</ins><span class="cx">     }
</span><span class="cx">     if ($target_user-&gt;in_group('bz_sudo_protect')) {
</span><span class="cx">         ThrowUserError('sudo_protected', { login =&gt; $target_user-&gt;login });
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    # If we have a reason passed in, keep it under 200 characters
-    my $reason = $cgi-&gt;param('reason') || '';
-    $reason = substr($reason, 0, 200);
-    
</del><span class="cx">     # Calculate the session expiry time (T + 6 hours)
</span><span class="cx">     my $time_string = time2str('%a, %d-%b-%Y %T %Z', time + MAX_SUDO_TOKEN_AGE, 'GMT');
</span><span class="cx"> 
</span><span class="lines">@@ -159,9 +153,12 @@
</span><span class="cx">     
</span><span class="cx">     # For the present, change the values of Bugzilla::user &amp; Bugzilla::sudoer
</span><span class="cx">     Bugzilla-&gt;sudo_request($target_user, $user);
</span><del>-    
</del><ins>+
</ins><span class="cx">     # NOTE: If you want to log the start of an sudo session, do it here.
</span><span class="cx"> 
</span><ins>+    # If we have a reason passed in, keep it under 200 characters
+    $reason = substr($reason, 0, 200);
+
</ins><span class="cx">     # Go ahead and send out the message now
</span><span class="cx">     my $message;
</span><span class="cx">     my $mail_template = Bugzilla-&gt;template_inner($target_user-&gt;setting('lang'));
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgt002goodperlt"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/t/002goodperl.t (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/t/002goodperl.t        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/t/002goodperl.t        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> 
</span><span class="cx"> use Support::Files;
</span><span class="cx"> 
</span><del>-use Test::More tests =&gt; (scalar(@Support::Files::testitems) * 3);
</del><ins>+use Test::More tests =&gt; (scalar(@Support::Files::testitems) * 4);
</ins><span class="cx"> 
</span><span class="cx"> my @testitems = @Support::Files::testitems; # get the files to test.
</span><span class="cx"> 
</span><span class="lines">@@ -126,4 +126,35 @@
</span><span class="cx">     
</span><span class="cx">     close(FILE);
</span><span class="cx"> }
</span><ins>+
+# Forbird the { foo =&gt; $cgi-&gt;param() } syntax, for security reasons.
+foreach my $file (@testitems) {
+    $file =~ s/\s.*$//; # nuke everything after the first space (#comment)
+    next unless $file; # skip null entries
+    if (!open(FILE, $file)) {
+        ok(0, &quot;could not open $file --WARNING&quot;);
+        next;
+    }
+    my $lineno = 0;
+    my @unsafe_args;
+
+    while (my $file_line = &lt;FILE&gt;) {
+        $lineno++;
+        $file_line =~ s/^\s*(.+)\s*$/$1/; # Remove leading and trailing whitespaces.
+        if ($file_line =~ /^[^#]+=&gt; \$cgi\-&gt;param/) {
+            push(@unsafe_args, &quot;$file_line on line $lineno&quot;);
+        }
+    }
+
+    if (@unsafe_args) {
+        ok(0, &quot;$file incorrectly passes a CGI argument to a hash --ERROR\n&quot; .
+              join(&quot;\n&quot;, @unsafe_args));
+    }
+    else {
+        ok(1, &quot;$file has no vulnerable hash syntax&quot;);
+    }
+
+    close(FILE);
+}
+
</ins><span class="cx"> exit 0;
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgtemplateendefaultemailbugmailtxttmpl"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/template/en/default/email/bugmail.txt.tmpl (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/template/en/default/email/bugmail.txt.tmpl        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/template/en/default/email/bugmail.txt.tmpl        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> [%- IF comment.count %]
</span><span class="cx"> --- Comment #[% comment.count %] from [% comment.author.identity %] ---
</span><span class="cx"> [% END %]
</span><del>-[%+ comment.body_full({ is_bugmail =&gt; 1, wrap =&gt; 1 }) %]
</del><ins>+[%+ comment.body_full({ is_bugmail =&gt; 1, wrap =&gt; 1 }) FILTER strip_control_chars %]
</ins><span class="cx"> [% END %]
</span><span class="cx"> 
</span><span class="cx"> -- [%# Protect the trailing space of the signature marker %]
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgtemplateendefaultfilterexceptionspl"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/template/en/default/filterexceptions.pl (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/template/en/default/filterexceptions.pl        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/template/en/default/filterexceptions.pl        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -186,7 +186,6 @@
</span><span class="cx"> ],
</span><span class="cx"> 
</span><span class="cx"> 'global/messages.html.tmpl' =&gt; [
</span><del>-  'message_tag', 
</del><span class="cx">   'series.frequency * 2',
</span><span class="cx"> ],
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgtemplateendefaultglobalmessageshtmltmpl"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/template/en/default/global/messages.html.tmpl (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/template/en/default/global/messages.html.tmpl        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/template/en/default/global/messages.html.tmpl        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -941,7 +941,7 @@
</span><span class="cx"> [% IF !message %]
</span><span class="cx">   [% message = BLOCK %]
</span><span class="cx">     You are using [% terms.Bugzilla %]'s messaging functions incorrectly. You
</span><del>-    passed in the string '[% message_tag %]'. The correct use is to pass
</del><ins>+    passed in the string '[% message_tag FILTER html %]'. The correct use is to pass
</ins><span class="cx">     in a tag, and define that tag in the file messages.html.tmpl.&lt;br&gt;
</span><span class="cx">     &lt;br&gt;
</span><span class="cx">     If you are a [% terms.Bugzilla %] end-user seeing this message, please
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgtemplateendefaultpagesreleasenoteshtmltmpl"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/template/en/default/pages/release-notes.html.tmpl (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/template/en/default/pages/release-notes.html.tmpl        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/template/en/default/pages/release-notes.html.tmpl        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -53,6 +53,56 @@
</span><span class="cx"> 
</span><span class="cx"> &lt;h2 id=&quot;v42_point&quot;&gt;Updates in this 4.2.x Release&lt;/h2&gt;
</span><span class="cx"> 
</span><ins>+&lt;h3&gt;4.2.11&lt;/h3&gt;
+
+&lt;p&gt;This release fixes several security issues. See the
+  &lt;a href=&quot;http://www.bugzilla.org/security/4.0.14/&quot;&gt;Security Advisory&lt;/a&gt;
+    for details.&lt;/p&gt;
+
+&lt;h3&gt;4.2.10&lt;/h3&gt;
+
+&lt;p&gt;This release fixes one security issue. See the
+  &lt;a href=&quot;http://www.bugzilla.org/security/4.0.13/&quot;&gt;Security Advisory&lt;/a&gt;
+    for details.&lt;/p&gt;
+
+&lt;h3&gt;4.2.9&lt;/h3&gt;
+
+&lt;p&gt;This release fixes one regression introduced in [% terms.Bugzilla %] 4.2.8 by
+  &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=968576&quot;&gt;security [% terms.bug %] 968576&lt;/a&gt;:
+  URLs in [% terms.bug %] comments are displayed correctly again.
+  (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=998323&quot;&gt;[% terms.Bug %] 998323&lt;/a&gt;)&lt;/p&gt;
+
+&lt;h3&gt;4.2.8&lt;/h3&gt;
+
+&lt;p&gt;This release fixes one minor security issue. See the
+  &lt;a href=&quot;http://www.bugzilla.org/security/4.0.11/&quot;&gt;Security Advisory&lt;/a&gt;
+  for details.&lt;/p&gt;
+
+&lt;p&gt;In addition, the following [% terms.bugs %] have been fixed in this release:&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;&lt;kbd&gt;checksetup.pl&lt;/kbd&gt; was incorrectly reporting DBI 1.630 (1.63) as
+    being older than 1.614, preventing the upgrade to complete.
+    If you still use Perl 5.10.0 or older, make sure you have the
+    &lt;a href=&quot;http://search.cpan.org/~jpeacock/version/lib/version.pod&quot;&gt;version&lt;/a&gt;
+    module installed before running &lt;kbd&gt;checksetup.pl&lt;/kbd&gt;.
+    If you use Perl 5.10.1 or newer, this module is already available and
+    no special action is required.
+    (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=938300&quot;&gt;[% terms.Bug %] 938300&lt;/a&gt;)&lt;/li&gt;
+  &lt;li&gt;&lt;kbd&gt;checksetup.pl&lt;/kbd&gt; no longer fails with &quot;Invalid version format (non-numeric data)&quot;
+    when a Perl module contains an invalid version number.
+    (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=781672&quot;&gt;[% terms.Bug %] 781672&lt;/a&gt;)&lt;/li&gt;
+  &lt;li&gt;The PROJECT environment variable is now correctly taken into account
+    when mod_perl is enabled (this variable allows several installations to
+    share the same codebase).
+    (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=843457&quot;&gt;[% terms.Bug %] 843457&lt;/a&gt;)&lt;/li&gt;
+  &lt;li&gt;[% terms.Bugzilla %] no longer crashes when the &lt;kbd&gt;shutdownhtml&lt;/kbd&gt;
+    parameter is set and using a non-cookie based authentication method.
+    (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=748095&quot;&gt;[% terms.Bug %] 748095&lt;/a&gt;)&lt;/li&gt;
+  &lt;li&gt;The default date and time format used for SQLite has been fixed.
+    (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=938161&quot;&gt;[% terms.Bug %] 938161&lt;/a&gt;)&lt;/li&gt;
+&lt;/ul&gt;
+
</ins><span class="cx"> &lt;h3&gt;4.2.7&lt;/h3&gt;
</span><span class="cx"> 
</span><span class="cx"> &lt;p&gt;This release fixes several security issues. See the
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgtemplateendefaultreportsreporttablecsvtmpl"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/template/en/default/reports/report-table.csv.tmpl (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/template/en/default/reports/report-table.csv.tmpl        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/template/en/default/reports/report-table.csv.tmpl        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -39,11 +39,13 @@
</span><span class="cx">   [% END %]
</span><span class="cx">   [% tbl_field_disp FILTER csv %]: [% tbl_disp FILTER csv %]
</span><span class="cx"> [% END %]
</span><del>-[% IF row_field %]
</del><ins>+[% IF row_field &amp;&amp; col_field %]
+  [% row_field_disp _ ' / ' _ col_field_disp FILTER csv %]
+[% ELSIF row_field %]
</ins><span class="cx">   [% row_field_disp FILTER csv %]
</span><ins>+[% ELSE %]
+  [% col_field_disp FILTER csv %]
</ins><span class="cx"> [% END %]
</span><del>-[% &quot; / &quot; IF col_field AND row_field %]
-[% col_field_disp FILTER csv %]
</del><span class="cx"> [% IF col_field -%]
</span><span class="cx">   [% FOREACH col = col_names -%]
</span><span class="cx">     [% colsepchar %]
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgtemplateendefaultrequestemailtxttmpl"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/template/en/default/request/email.txt.tmpl (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/template/en/default/request/email.txt.tmpl        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/template/en/default/request/email.txt.tmpl        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -82,11 +82,14 @@
</span><span class="cx"> 
</span><span class="cx"> [%- FILTER bullet = wrap(80) %]
</span><span class="cx"> 
</span><del>-[% USE Bugzilla %]
-[%-# .defined is necessary to avoid a taint issue in Perl &lt; 5.10.1, see bug 509794. %]
-[% IF Bugzilla.cgi.param(&quot;comment&quot;).defined &amp;&amp; Bugzilla.cgi.param(&quot;comment&quot;).length &gt; 0 %]
-------- Additional Comments from [% user.identity %]
-[%+ Bugzilla.cgi.param(&quot;comment&quot;) %]
</del><ins>+[% FOREACH comment = new_comments %]
+
+[%- IF comment.count %]
+--- Comment #[% comment.count %] from [% comment.author.identity %] ---
+[% ELSE %]
+--- Description ---
</ins><span class="cx"> [% END %]
</span><ins>+[%+ comment.body_full({ is_bugmail =&gt; 1, wrap =&gt; 1 }) FILTER strip_control_chars %]
+[% END %]
</ins><span class="cx"> 
</span><span class="cx"> [%- END %]
</span></span></pre></div>
<a id="trunkWebsitesbugswebkitorgtokencgi"></a>
<div class="modfile"><h4>Modified: trunk/Websites/bugs.webkit.org/token.cgi (174778 => 174779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Websites/bugs.webkit.org/token.cgi        2014-10-16 16:01:28 UTC (rev 174778)
+++ trunk/Websites/bugs.webkit.org/token.cgi        2014-10-16 16:01:32 UTC (rev 174779)
</span><span class="lines">@@ -382,7 +382,7 @@
</span><span class="cx"> 
</span><span class="cx">     my $otheruser = Bugzilla::User-&gt;create({
</span><span class="cx">         login_name =&gt; $login_name, 
</span><del>-        realname   =&gt; $cgi-&gt;param('realname'), 
</del><ins>+        realname   =&gt; scalar $cgi-&gt;param('realname'),
</ins><span class="cx">         cryptpassword =&gt; $password});
</span><span class="cx"> 
</span><span class="cx">     # Now delete this token.
</span></span></pre>
</div>
</div>

</body>
</html>