From 4dfe787bc255ac6fb8cb3304f246155c3e1562cf Mon Sep 17 00:00:00 2001 From: Graham Christensen Date: Wed, 20 Oct 2021 11:56:16 -0400 Subject: [PATCH] perlcritic: each() called at line 752, column 35. The each function may cause undefined behavior when operating on the hash while iterating. Use a foreach loop over the hash's keys or values instead. --- src/lib/Hydra/Helper/AddBuilds.pm | 6 ++++-- src/lib/Hydra/Plugin/GitInput.pm | 3 ++- src/lib/Hydra/Plugin/S3Backup.pm | 6 ++++-- src/script/hydra-eval-jobset | 9 ++++++--- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/lib/Hydra/Helper/AddBuilds.pm b/src/lib/Hydra/Helper/AddBuilds.pm index 0bd0181d..1fc6adf2 100644 --- a/src/lib/Hydra/Helper/AddBuilds.pm +++ b/src/lib/Hydra/Helper/AddBuilds.pm @@ -64,7 +64,8 @@ sub updateDeclarativeJobset { $db->txn_do(sub { my $jobset = $project->jobsets->update_or_create(\%update); $jobset->jobsetinputs->delete; - while ((my $name, my $data) = each %{$declSpec->{"inputs"}}) { + foreach my $name (keys %{$declSpec->{"inputs"}}) { + my $data = $declSpec->{"inputs"}{$name}; my $row = { name => $name, type => $data->{type} @@ -84,7 +85,8 @@ sub handleDeclarativeJobsetJson { my @kept = keys %$declSpec; push @kept, ".jobsets"; $project->jobsets->search({ name => { "not in" => \@kept } })->update({ enabled => 0, hidden => 1 }); - while ((my $jobsetName, my $spec) = each %$declSpec) { + foreach my $jobsetName (keys %$declSpec) { + my $spec = $declSpec{$jobsetName}; eval { updateDeclarativeJobset($db, $project, $jobsetName, $spec); 1; diff --git a/src/lib/Hydra/Plugin/GitInput.pm b/src/lib/Hydra/Plugin/GitInput.pm index 39a5cf83..02aa430d 100644 --- a/src/lib/Hydra/Plugin/GitInput.pm +++ b/src/lib/Hydra/Plugin/GitInput.pm @@ -118,7 +118,8 @@ sub fetchInput { $jobset->get_column('name'), $name); # give preference to the options from the input value - while (my ($opt_name, $opt_value) = each %{$options}) { + foreach my $opt_name (keys %{$options}) { + my $opt_value = $options{$opt_name}; if ($opt_value =~ /^[+-]?\d+\z/) { $opt_value = int($opt_value); } diff --git a/src/lib/Hydra/Plugin/S3Backup.pm b/src/lib/Hydra/Plugin/S3Backup.pm index a67082ec..98e79747 100644 --- a/src/lib/Hydra/Plugin/S3Backup.pm +++ b/src/lib/Hydra/Plugin/S3Backup.pm @@ -98,7 +98,8 @@ sub buildFinished { foreach my $reference (@{$refs}) { push @needed_paths, $reference; } - while (my ($compression_type, $configs) = each %compression_types) { + foreach my $compression_type (keys %compression_types) { + my $configs = $compression_types{$compression_type}; my @incomplete_buckets = (); # Don't do any work if all the buckets have this path foreach my $bucket_config (@{$configs}) { @@ -144,7 +145,8 @@ sub buildFinished { } # Upload narinfos - while (my ($compression_type, $infos) = each %narinfos) { + foreach my $compression_type (keys %narinfos) { + my $infos = $narinfos{$compression_type}; foreach my $bucket_config (@{$compression_types{$compression_type}}) { foreach my $info (@{$infos}) { my $bucket = $client->bucket( name => $bucket_config->{name} ); diff --git a/src/script/hydra-eval-jobset b/src/script/hydra-eval-jobset index 14f4467e..c61ce226 100755 --- a/src/script/hydra-eval-jobset +++ b/src/script/hydra-eval-jobset @@ -753,7 +753,8 @@ sub checkJobsetWrapped { if ($jobsetChanged) { # Create JobsetEvalMembers mappings. - while (my ($id, $x) = each %buildMap) { + foreach my $id (keys %buildMap) { + my $x = $buildMap{$id}; $ev->jobsetevalmembers->create({ build => $id, isnew => $x->{new} }); } @@ -762,7 +763,8 @@ sub checkJobsetWrapped { # builds for the same derivation, pick the one with the # shortest name. my %drvPathToId; - while (my ($id, $x) = each %buildMap) { + foreach my $id (keys %buildMap) { + my $x = $buildMap{$id}; my $y = $drvPathToId{$x->{drvPath}}; if (defined $y) { next if length $x->{jobName} > length $y->{jobName}; @@ -806,7 +808,8 @@ sub checkJobsetWrapped { # Wake up hydra-queue-runner. my $lowestId; - while (my ($id, $x) = each %buildMap) { + foreach my $id (keys %buildMap) { + my $x = $buildMap{$id}; $lowestId = $id if $x->{new} && (!defined $lowestId || $id < $lowestId); } $notifyAdded->execute($lowestId) if defined $lowestId;