Division by zero in innreport
Julien ÉLIE
julien at trigofacile.com
Wed Jan 4 23:14:49 UTC 2012
Hi John,
> Errors started on January 1. First change of the year.
>
> Illegal division by zero at /usr/lib/news/bin/innreport line 1747.
> Daily Usenet report for my.net from Jan 3 00:00:02 to Jan 4 00:00:01
>
>
> 1743 foreach $key (sort keys %$dates) {
> 1744 $x_min = $key if $x_min > $key;
> 1745 $x_max = $$dates{$key} if $x_max < $$dates{$key};
> 1746 my $delta = $dates->{$key} - $key;
> 1747 my $t = $out->{$key} / $delta;
> 1748 $y_max_out = $t if $y_max_out < $t;
> 1749 $t = $in->{$key} / $delta;
> 1750 $y_max_in = $t if $y_max_in < $t;
> 1751 }
Thanks for the bug report.
The problem comes from the parsing of innreport.db (for HTML pages generated
by innreport).
If you have in this file a change of year for which the hours are the same
between Dec 31th and Jan 1st, then this error is generated.
For instance:
news-notice.2010.12.31-04.15.02.html|Dec 31 04:15:02 -- Jan 1 04:15:02|28079|2791|7.9 MB|34320|1500|4.6 MB
There is an issue in how innreport translates these dates. The ConvDate()
function assumes the dates are relative to the *current* year. So it
thinks it has been passed Dec 31th 2012 and Jan 1st 2012 (whereas it was
Dec 31th 2010 and Jan 1st 2011). As 2012 is a leap year, and Dec 31th
is after Feb 28th, the translated date contains an unexpected "+1 day".
In innreport we have:
$start = &ConvDate ($start);
$end = &ConvDate ($end);
# 31/12 - 1/1 ?
my $inc = $end < $start ? 1 : 0;
$start += (($year - 1970) * 365 +
int (($year - 1968) / 4)) * 3600 * 24;
$year += $inc;
$end += (($year + - 1970) * 365 + int (($year - 1968) / 4)) * 3600 * 24;
$dates{$start} = $end;
Which is exactly the variables used by the code you quoted above:
my $delta = $dates->{$key} - $key;
$delta equals 0 here, whence the illegal division.
The visible effect of this bug is for instance:
http://common.albasani.net/innreport/
where the main page has not been updated since the beginning of the year.
It is caused by the presence of "Dec 31 04:15:02 -- Jan 1 04:15:02".
No HTML report is lost. They are properly generated, but the main page
is not updated. For instance, Jan 3rd is here:
http://common.albasani.net/innreport/news-notice.2012.01.01-03.15.31.xhtml
Thanks again for having caught that issue.
It is a bit annoying for those who generate HTML reports.
--
Julien ÉLIE
« Le tennis c'est comme le ping-pong, sauf qu'au tennis, les joueurs
sont debout sur la table. »
More information about the inn-workers
mailing list