Hi,

DateTime::Set 0.21 dies when as_list is asked to produce a list from
outside the range of the set.  It shows up in the tests included with
DateTime::Event::ICal.

 Can't call method "is_infinite" on an undefined value at 
/usr/lib/perl5/site_perl/5.8.3/DateTime/Set.pm line 508.

I've attached a patch for DateTime::Set.  Hope you find it useful.

sbg
diff -ruN DateTime-Set-0.21/lib/DateTime/Set.pm DateTime-Set-0.21-sbg/lib/DateTime/Set.pm
--- DateTime-Set-0.21/lib/DateTime/Set.pm	2005-04-08 00:40:53.000000000 +1000
+++ DateTime-Set-0.21-sbg/lib/DateTime/Set.pm	2005-05-06 15:16:52.299754149 +1000
@@ -505,8 +505,8 @@
     ## return undef if $set->{set}->is_too_complex;  # undef = no begin/end
  
     return undef
-        if $set->max->is_infinite ||
-           $set->min->is_infinite;
+        if ( $set->max && $set->max->is_infinite ) ||
+           ( $set->min && $set->min->is_infinite );
 
     # return if $set->{set}->is_null;  # nothing = empty
     my @result;
diff -ruN DateTime-Set-0.21/t/as_list_empty.t DateTime-Set-0.21-sbg/t/as_list_empty.t
--- DateTime-Set-0.21/t/as_list_empty.t	1970-01-01 10:00:00.000000000 +1000
+++ DateTime-Set-0.21-sbg/t/as_list_empty.t	2005-05-06 15:19:07.307484035 +1000
@@ -0,0 +1,24 @@
+#!/usr/bin/perl
+
+use strict;
+
+use Test::More tests => 2;
+
+use DateTime;
+use DateTime::Set;
+
+my $d1 = DateTime->new( year => 2002, month => 3, day => 11 );
+my $d2 = DateTime->new( year => 2002, month => 4, day => 11 );
+my $d3 = DateTime->new( year => 2002, month => 5, day => 11 );
+my( $set, $r, @dt );
+
+$set = DateTime::Set->from_datetimes( dates => [ $d1 ] );
[EMAIL PROTECTED] = $set->as_list;
+$r = join(' ', @dt);
+
+is($r, '2002-03-11T00:00:00', 'Single date set');
+
[EMAIL PROTECTED] = $set->as_list( start => $d2, end => $d3 );
+$r = join(' ', @dt);
+
+is($r, '', 'Out of range');

Reply via email to