Subject: | Infinite loop condition in first_after |
Date: | Fri, 02 Mar 2007 12:06:07 +0100 |
To: | bug-business-hours [...] rt.cpan.org |
From: | Patrick Forsberg <fors [...] chalmers.se> |
Hi there.
There's a logical error in the first_after function of Business::Hours
$MAXTIME is set to a fix number
$period is set to a fix number less than $MAXTIME
the while ($hours->empty) loop has function to exit if ($end >= $start + $MAXTIME)
but at the end of the loop $start=$end and $end = $start+period so the exit condition will never be true;
Something like this will solve the problem
###########
--- Hours.pm 2005-07-08 17:44:00.000000000 +0200
+++ Hours.pm 2007-03-02 12:03:16.000000000 +0100
@@ -336,13 +336,14 @@
# the maximum time after which we stop searching for business hours
my $MAXTIME = (30 * 24 * 60 * 60); # 30 days
+ my $ENDTIME = $start + $MAXTIME;
my $period = (24 * 60 * 60);
my $end = $start + $period;
my $hours = new Set::IntSpan;
while ($hours->empty) {
- if ($end >= $start + $MAXTIME) {
+ if ($end >= $ENDTIME) {
return -1;
}
$hours = $self->for_timespan(Start => $start, End => $end);
###########
Regards,
Patrick Forsberg