Skip to content

IO::Compress::Gzip accidentally modifies the $EXPORT_TAGS{all}->@* of other modules #64

@ikegami

Description

@ikegami

The following program fails:

use v5.36;
use IO::Compress::Zip  qw();
use IO::Compress::Gzip qw();
use IO::Compress::Zip  qw( :all );
say "ok";
"gzip" is not exported by the IO::Compress::Zip module
"$GzipError" is not exported by the IO::Compress::Zip module
Can't continue after import errors at a.pl line 4.
BEGIN failed--compilation aborted at a.pl line 4.

It fails because IO::Compress::Gzip accidentally modifies the $EXPORT_TAGS{all}->@* of other modules.

The fix is simple. Replace

%EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ;

push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;

with

%EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ;

$EXPORT_TAGS{all} = [ @{ $EXPORT_TAGS{all} }, @EXPORT_OK ] ;

This replaces a shallow copy of the %EXPORTS_TAGS with a deeper one.

This bug was first reported on StackOverflow.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions