Skip to content

Commit

Permalink
OpenSSL::OID: Don't use List::Util
Browse files Browse the repository at this point in the history
It turns out that the pairwise functions of List::Util came into perl
far later than 5.10.0.  We can't use that under those conditions, so
must revert to a quick internal implementation of the functions we're
after.

Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from openssl#11503)
  • Loading branch information
levitte committed Apr 9, 2020
1 parent ae32542 commit 8519b24
Showing 1 changed file with 31 additions and 4 deletions.
35 changes: 31 additions & 4 deletions util/perl/OpenSSL/OID.pm
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,13 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
registered_oid_arcs registered_oid_leaves);
@EXPORT_OK = qw(encode_oid_nums);

use List::Util;
# Unfortunately, the pairwise List::Util functionality came with perl
# v5.19.3, and I want to target absolute compatibility with perl 5.10
# and up. That means I have to implement quick pairwise functions here.

#use List::Util;
sub _pairs (@);
sub _pairmap (&@);

=head1 NAME
Expand Down Expand Up @@ -163,7 +169,8 @@ sub parse_oid {
# As we currently only support a name without number as first
# component, the easiest is to have a direct look at it and
# hack it.
my @first = List::Util::pairmap {
my @first = _pairmap {
my ($a, $b) = @$_;
return $b if $b ne '';
return @{$name2oid{$a}->{nums}} if $a ne '' && defined $name2oid{$a};
croak "Undefined identifier $a" if $a ne '';
Expand All @@ -173,7 +180,8 @@ sub parse_oid {
my @numbers =
(
@first,
List::Util::pairmap {
_pairmap {
my ($a, $b) = @$_;
return $b if $b ne '';
croak "Unsupported relative OID $a" if $a ne '';
croak "Empty OID element (how's that possible?)";
Expand Down Expand Up @@ -277,6 +285,25 @@ Richard levitte, C<< <richard at levitte.org> >>
=cut

######## Helpers

sub _pairs (@) {
croak "Odd number of arguments" if @_ & 1;

my @pairlist = ();

while (@_) {
my $x = [ shift, shift ];
push @pairlist, $x;
}
return @pairlist;
}

sub _pairmap (&@) {
my $block = shift;
map { $block->($_) } _pairs @_;
}

######## UNIT TESTING

use Test::More;
Expand Down Expand Up @@ -309,7 +336,7 @@ sub TEST {
+ scalar @bad_cases;

note 'Predefine a few names OIDs';
foreach my $pair ( List::Util::pairs @predefined ) {
foreach my $pair ( _pairs @predefined ) {
ok( defined eval { register_oid(@$pair) },
"Registering $pair->[0] => $pair->[1]" );
}
Expand Down

0 comments on commit 8519b24

Please sign in to comment.