From: Guillermo Roditi Date: Mon, 23 Jun 2008 21:18:19 +0000 (+0000) Subject: eliminate usage of each() on hashes we don't own, since we can't guarantee the iterat... X-Git-Tag: 5.8000_03~105 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=91772de91ca26edab67f5849eccbfbbe0d2cfd51 eliminate usage of each() on hashes we don't own, since we can't guarantee the iterator position's been reset so it's a bug waiting to happen r17536@martha (orig r7627): matthewt | 2008-04-22 16:46:12 -0400 --- diff --git a/lib/Catalyst/Engine.pm b/lib/Catalyst/Engine.pm index 2de21bd..aa8215c 100644 --- a/lib/Catalyst/Engine.pm +++ b/lib/Catalyst/Engine.pm @@ -70,7 +70,9 @@ sub finalize_cookies { my @cookies; my $response = $c->response; - while( my($name, $val) = each %{ $response->cookies } ) { + foreach my $name (keys %{ $response->cookies }) { + + my $val = $response->cookies->{$name}; my $cookie = ( Scalar::Util::blessed($val) @@ -293,7 +295,8 @@ sub finalize_uploads { my ( $self, $c ) = @_; my $request = $c->request; - while( my($key,$upload) = each %{ $request->uploads } ) { + foreach my $key (keys %{ $request->uploads }) { + my $upload = $request->uploads->{$key}; unlink grep { -e $_ } map { $_->tempname } (ref $upload eq 'ARRAY' ? @{$upload} : ($upload)); } @@ -404,12 +407,14 @@ sub prepare_parameters { my $body_parameters = $request->body_parameters; my $query_parameters = $request->query_parameters; # We copy, no references - while( my($name, $param) = each(%$query_parameters) ) { + foreach my $name (keys %$query_parameters) { + my $param = $query_parameters->{$name}; $parameters->{$name} = ref $param eq 'ARRAY' ? [ @$param ] : $param; } # Merge query and body parameters - while( my($name, $param) = each(%$body_parameters) ) { + foreach my $name (keys %$body_parameters) { + my $param = $body_parameters->{$name}; my @values = ref $param eq 'ARRAY' ? @$param : ($param); if ( my $existing = $parameters->{$name} ) { unshift(@values, (ref $existing eq 'ARRAY' ? @$existing : $existing)); @@ -511,7 +516,8 @@ sub prepare_uploads { my $uploads = $request->{_body}->upload; my $parameters = $request->parameters; - while(my($name,$files) = each(%$uploads) ) { + foreach my $name (keys %$uploads) { + my $files = $uploads->{$name}; my @uploads; for my $upload (ref $files eq 'ARRAY' ? @$files : ($files)) { my $headers = HTTP::Headers->new( %{ $upload->{headers} } );