while (<KID>) {
chomp;
+ if ( $_ eq "" ) { next; }
my ($type, undef) = split /:/;
if ($type eq 'pub') {
my ($type, $keyid, $algo, $bits, $created, undef, $revoked) = split /:/;
my %unique;
my @keys = grep { !$unique{$_}++ }
- grep { /^[0-9A-Fa-f]{8}$/ }
+ # get the keyID; can be 8, 16 or 40 nibbles
+ grep { /^((([a-zA-Z0-9]{24})?[a-zA-Z0-9]{8})?[a-zA-Z0-9]{8})$/ }
map { s/\s//g; $_ } <ERRFH>;
wait;
push @args, '--recv-keys';
for my $keyid (@$keyids) {
# untaint keyids
- my ($cleanid) = $keyid =~ /^([a-zA-Z0-9]{8})$/;
+ my ($cleanid) = $keyid =~ /^((([a-zA-Z0-9]{24})?[a-zA-Z0-9]{8})?[a-zA-Z0-9]{8})$/;
warn ("keyid '$keyid' has unexpected format - skipping\n"), next
unless defined $cleanid;
push @args, $cleanid;