]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1054702: CSV export vulnerable to formulae injection
authorSimon Green <sgreen@redhat.com>
Mon, 6 Oct 2014 14:59:17 +0000 (14:59 +0000)
committerDavid Lawrence <dkl@mozilla.com>
Mon, 6 Oct 2014 14:59:17 +0000 (14:59 +0000)
r=glob,a=glob

Bugzilla/Template.pm
template/en/default/reports/report-table.csv.tmpl

index 0cb20620d6e1eaa08294f69b25c09ffeaa589453..72144de89ff1d8d9d6b87fbf462312c3de6f07a3 100644 (file)
@@ -730,10 +730,12 @@ sub create {
             },
 
             # In CSV, quotes are doubled, and any value containing a quote or a
-            # comma is enclosed in quotes.
+            # comma is enclosed in quotes. If a field starts with an equals
+            # sign, it is proceed by a space.
             csv => sub
             {
                 my ($var) = @_;
+                $var = ' ' . $var if substr($var, 0, 1) eq '=';
                 $var =~ s/\"/\"\"/g;
                 if ($var !~ /^-?(\d+\.)?\d*$/) {
                     $var = "\"$var\"";
index 4d8b50a859bc827bfda57b12ac5893900cc403d3..c978cf981a11cb871a40c1491f817108957344c3 100644 (file)
   [% END %]
   [% tbl_field_disp FILTER csv %]: [% tbl_disp FILTER csv %]
 [% END %]
-[% IF row_field %]
+[% IF row_field && col_field %]
+  [% row_field_disp _ ' / ' _ col_field_disp FILTER csv %]
+[% ELSIF row_field %]
   [% row_field_disp FILTER csv %]
+[% ELSE %]
+  [% col_field_disp FILTER csv %]
 [% END %]
-[% " / " IF col_field AND row_field %]
-[% col_field_disp FILTER csv %]
 [% IF col_field -%]
   [% FOREACH col = col_names -%]
     [% colsepchar %]