Archive-Zip-Parser

 view release on metacpan or  search on metacpan

lib/Archive/Zip/Parser/Entry/Header.pm  view on Meta::CPAN

    my $extra_field
        = Struct(
            '_extra_field',
            RepeatUntil(
                sub {
                    $_->obj->{'_position'} == $self->{'_extra_field_length'};
                },
                Struct(
                    '_header',
                    ULInt16('_id'),
                    ULInt16('_size'),
                    Field(
                        '_data',
                        sub {
                            $_->ctx->{'_size'}
                        }
                    ),
                    Anchor('_position'),
                ),
            ),
        );
    my $parsed_extra_field = $extra_field->parse( $self->{'_extra_field'} );

    if ( $argref->{'describe'} ) {
        my %extra_field_description_mapping = (
            '0001' => 'Zip64 extended information extra field',
            '0007' => 'AV Info',
            '0008' => 'Reserved for extended language encoding data (PFS)',
            '0009' => 'OS/2',
            '000a' => 'NTFS ',
            '000c' => 'OpenVMS',
            '000d' => 'UNIX',
            '000e' => 'Reserved for file stream and fork descriptors',
            '000f' => 'Patch Descriptor',
            '0014' => 'PKCS#7 Store for X.509 Certificates',
            '0015' => 'X.509 Certificate ID and Signature for individual file',
            '0016' => 'X.509 Certificate ID for Central Directory',
            '0017' => 'Strong Encryption Header',
            '0018' => 'Record Management Controls',
            '0019' => 'PKCS#7 Encryption Recipient Certificate List',
            '0065' =>
              'IBM S/390 (Z390), AS/400 (I400) attributes - uncompressed',
            '0066' =>
              'Reserved for IBM S/390 (Z390), AS/400 (I400) attributes - compressed',
            '4690' => 'POSZIP 4690 (reserved) ',
            '07c8' => 'Macintosh',
            '2605' => 'ZipIt Macintosh',
            '2705' => 'ZipIt Macintosh 1.3.5+',
            '2805' => 'ZipIt Macintosh 1.3.5+',
            '334d' => 'Info-ZIP Macintosh',
            '4341' => 'Acorn/SparkFS ',
            '4453' => 'Windows NT security descriptor (binary ACL)',
            '4704' => 'VM/CMS',
            '470f' => 'MVS',
            '4b46' => 'FWKCS MD5',
            '4c41' => 'OS/2 access control list (text ACL)',
            '4d49' => 'Info-ZIP OpenVMS',
            '4f4c' => 'Xceed original location extra field',
            '5356' => 'AOS/VS (ACL)',
            '5455' => 'extended timestamp',
            '554e' => 'Xceed unicode extra field',
            '5855' => 'Info-ZIP UNIX (original, also OS/2, NT, etc)',
            '6375' => 'Info-ZIP Unicode Comment Extra Field',
            '6542' => 'BeOS/BeBox',
            '7075' => 'Info-ZIP Unicode Path Extra Field',
            '756e' => 'ASi UNIX',
            '7855' => 'Info-ZIP UNIX (new)',
            'a220' => 'Microsoft Open Packaging Growth Hint',
            'fd4a' => 'SMS/QDOS',
        );

        my %extra_field_descriptions;
        my @descriptions_to_be_serialised;
        for ( @{ $parsed_extra_field->{'_header'} } ) {
            my $id   = unpack( 'H*', pack( 'n', $_->{'_id'} ) );
            my $data = unpack( 'H*', $_->{'_data'} );
            my @serialised_extra_field_description;

            if ( exists $extra_field_description_mapping{$id} ) {
                my $description = $extra_field_description_mapping{$id};
                $extra_field_descriptions{$description} = $data;
                push @descriptions_to_be_serialised, $description;
            }
            else {
                $extra_field_descriptions{$id} = $data;
            }
        }

        return %extra_field_descriptions;
    }

    my %extra_field;
    for ( @{ $parsed_extra_field->{'_header'} } ) {
        my $id   = unpack( 'H*', pack( 'n', $_->{'_id'} ) );
        my $data = unpack( 'H*', $_->{'_data'} );
        $extra_field{$id} = $data;
    }
    return %extra_field;
}

1;



( run in 0.475 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )