houseabsolute / DateTime-TimeZone

Time zone object base class and factory
https://metacpan.org/release/DateTime-TimeZone/
Other
9 stars 25 forks source link

_find_matching_zoneinfo_file returns filename only, causing _from_etc_localtime to fail #14

Open autarch opened 7 years ago

autarch commented 7 years ago

Migrated from rt.cpan.org #14874 (status was 'stalled')

Requestors:

From on 2005-10-02 05:19:51:

DateTime::TimeZone version 0.36 Perl version 5.005_03 FreeBSD 4.10

On line 151 of my version of DateTime::TimeZone::Local, the variable $realname is assigned the value of $ in the subroutine _find_matching_zoneinfo_file. On my system, that is only the filename without any directory component. Thus a timezone of "America/Los_Angeles" only assigns the value "Los_Angeles" to $real_name. When it gets back up into _from_etc_localtime, "Los_Angeles" is not a valid time zone and therefore DateTime::TimeZone->new() fails on line 71.

To fix this, I modified line 151 to read:

$real_name = $File::Find::name;

This returns the file path in $real_name, ultimately ending up with the correct timezone of "America/Los_Angeles" in _from_etc_localtime.

I have not tested version 0.37, but it appears the line in question has not changed in that version.

My version of File::Find does not seem to contain a version number.

autarch commented 7 years ago

From drolsky@cpan.org (@autarch) on 2006-05-21 17:53:03:

On Sun Oct 02 01:19:51 2005, guest wrote:

DateTime::TimeZone version 0.36 Perl version 5.005_03 FreeBSD 4.10

On line 151 of my version of DateTime::TimeZone::Local, the variable $realname is assigned the value of $ in the subroutine _find_matching_zoneinfo_file. On my system, that is only the filename without any directory component. Thus a timezone of "America/Los_Angeles" only assigns the value "Los_Angeles" to $real_name. When it gets back up into _from_etc_localtime, "Los_Angeles" is not a valid time zone and therefore DateTime::TimeZone->new() fails on line 71.

To fix this, I modified line 151 to read:

$real_name = $File::Find::name;

This returns the file path in $real_name, ultimately ending up with the correct timezone of "America/Los_Angeles" in _from_etc_localtime.

I have not tested version 0.37, but it appears the line in question has not changed in that version.

My version of File::Find does not seem to contain a version number.

This should have been fixed a while back when I changed the code to call File::Find with the nochdir option. In that case, the value of $ and $File::Find::name should be the same inside the callback, per the File::Find docs. However, that change was back in 0.2507.

Are you still seeing this problem?