Package: libdatetime-timezone-perl
Version: 1.63-1+2013h
Severity: normal
Tags: upstream patch

Dear Maintainer,

Bugzilla versions 4.2 and 4.4 both malfunction under the latest Perl (5.18.2-2) 
and libdatetime-timezone-perl (1.63-1+2013h) with the message "Cannot determine 
local time zone".

This occurs because Bugzilla runs under "Taint Mode", where values from 
untrusted sources are marked as 'tainted'; certain risky operations (eval, 
exec/system, open file for writing) will fail when their arguments are tainted. 
 This includes the mechanism used by the constructor for DateTime::TimeZone.

When DateTime::TimeZone::Local::Unix loads the time zone name from 
/etc/timezone, the zone name is tainted; then, when the name is passed to 
DateTime::TimeZone->new, it fails.

DateTime::TimeZone->new already securely validates the zone name before using 
it.  Attached is a patch (created using quilt) that modifies that validation 
code such that it also untaints the zone name at the same time.  It also adds a 
new test to the test suite to verify correct operation.

An equivalent patch has been submitted directly to the author of 
DateTime::TimeZone.

-- System Information:
Debian Release: jessie/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 3.2.0-4-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
--- /dev/null
+++ b/t/22taintmode.t
@@ -0,0 +1,9 @@
+#!perl -wT
+use strict;
+use warnings;
+use Test::More 0.88;
+
+use_ok('DateTime::TimeZone::Local');
+ok( ref DateTime::TimeZone::Local->TimeZone );
+
+done_testing();
--- a/lib/DateTime/TimeZone.pm
+++ b/lib/DateTime/TimeZone.pm
@@ -70,7 +70,7 @@
     my $real_class = "DateTime::TimeZone::$subclass";
 
     die "The timezone '$p{name}' in an invalid name.\n"
-        unless $real_class =~ /^\w+(::\w+)*$/;
+        unless ($real_class) = ($real_class =~ /^(\w+(?:::\w+)*)$/);
 
     unless ( $real_class->can('instance') ) {
         my $e = do {

Reply via email to