Thread: [poe-commits] SF.net SVN: poe: [1942] trunk/poe/lib/POE/Filter/Stackable.pm
Brought to you by:
rcaputo
From: <ap...@us...> - 2006-04-29 18:10:39
|
Revision: 1942 Author: apocal Date: 2006-04-29 11:10:00 -0700 (Sat, 29 Apr 2006) ViewCVS: http://svn.sourceforge.net/poe/?rev=1942&view=rev Log Message: ----------- #18552: POE::Filter::Stackable does not check it's params Added some more sanity checks Modified Paths: -------------- trunk/poe/lib/POE/Filter/Stackable.pm Modified: trunk/poe/lib/POE/Filter/Stackable.pm =================================================================== --- trunk/poe/lib/POE/Filter/Stackable.pm 2006-04-29 17:27:08 UTC (rev 1941) +++ trunk/poe/lib/POE/Filter/Stackable.pm 2006-04-29 18:10:00 UTC (rev 1942) @@ -26,11 +26,26 @@ croak "$type must be given an even number of parameters" if @_ & 1; my %params = @_; - my $self = bless [ - $params{Filters}, # FILTERS - ], $type; + # Sanity check the filters + if ( exists $params{Filters} and defined $params{Filters} + and ref( $params{Filters} ) and ref( $params{Filters} ) eq 'ARRAY' + and scalar @{ $params{Filters} } > 0 ) { - $self; + # Check the elements + foreach my $elem ( @{ $param{Filters} } ) { + if ( ! defined $elem or ! UNIVERSAL::isa( $elem, 'POE::Filter' ) ) { + croak "Filter element is not a POE::Filter instance!"; + } + } + + my $self = bless [ + $params{Filters}, # FILTERS + ], $type; + + return $self; + } else { + croak "Filters is not an ARRAY reference!"; + } } sub clone { @@ -38,7 +53,7 @@ my $clone = bless [ [ ], # FILTERS ], ref $self; - foreach my $filter ($self->[FILTERS]) { + foreach my $filter (@{$self->[FILTERS]}) { push (@{$clone->[FILTERS]}, $filter->clone()); } $clone; @@ -128,7 +143,8 @@ sub shift { my ($self) = @_; my $filter = shift @{$self->[FILTERS]}; - $self->[FILTERS]->[0]->put($filter->get_pending || []); + my $pending = $filter->get_pending; + $self->[FILTERS]->[0]->put( $pending ) if $pending; $filter; } @@ -136,6 +152,14 @@ sub unshift { my ($self, @filters) = @_; + + # Sanity check + foreach my $elem ( @filters ) { + if ( ! defined $elem or ! UNIVERSAL::isa( $elem, 'POE::Filter' ) ) { + croak "Filter element is not a POE::Filter instance!"; + } + } + unshift(@{$self->[FILTERS]}, @filters); } @@ -143,6 +167,14 @@ sub push { my ($self, @filters) = @_; + + # Sanity check + foreach my $elem ( @filters ) { + if ( ! defined $elem or ! UNIVERSAL::isa( $elem, 'POE::Filter' ) ) { + croak "Filter element is not a POE::Filter instance!"; + } + } + push(@{$self->[FILTERS]}, @filters); } @@ -151,7 +183,8 @@ sub pop { my ($self) = @_; my $filter = pop @{$self->[FILTERS]}; - $self->[FILTERS]->[-1]->put($filter->get_pending || []); + my $pending = $filter->get_pending; + $self->[FILTERS]->[-1]->put( $pending ) if $pending; $filter; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ap...@us...> - 2006-04-29 18:13:40
|
Revision: 1943 Author: apocal Date: 2006-04-29 11:13:09 -0700 (Sat, 29 Apr 2006) ViewCVS: http://svn.sourceforge.net/poe/?rev=1943&view=rev Log Message: ----------- Oops, bad typo! Modified Paths: -------------- trunk/poe/lib/POE/Filter/Stackable.pm Modified: trunk/poe/lib/POE/Filter/Stackable.pm =================================================================== --- trunk/poe/lib/POE/Filter/Stackable.pm 2006-04-29 18:10:00 UTC (rev 1942) +++ trunk/poe/lib/POE/Filter/Stackable.pm 2006-04-29 18:13:09 UTC (rev 1943) @@ -32,7 +32,7 @@ and scalar @{ $params{Filters} } > 0 ) { # Check the elements - foreach my $elem ( @{ $param{Filters} } ) { + foreach my $elem ( @{ $params{Filters} } ) { if ( ! defined $elem or ! UNIVERSAL::isa( $elem, 'POE::Filter' ) ) { croak "Filter element is not a POE::Filter instance!"; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <im...@us...> - 2006-05-22 17:57:41
|
Revision: 1963 Author: immute Date: 2006-05-22 10:57:36 -0700 (Mon, 22 May 2006) ViewCVS: http://svn.sourceforge.net/poe/?rev=1963&view=rev Log Message: ----------- Fixed Stackable.pm to make Filter optional again. Modified Paths: -------------- trunk/poe/lib/POE/Filter/Stackable.pm Modified: trunk/poe/lib/POE/Filter/Stackable.pm =================================================================== --- trunk/poe/lib/POE/Filter/Stackable.pm 2006-05-22 08:21:37 UTC (rev 1962) +++ trunk/poe/lib/POE/Filter/Stackable.pm 2006-05-22 17:57:36 UTC (rev 1963) @@ -26,10 +26,9 @@ croak "$type must be given an even number of parameters" if @_ & 1; my %params = @_; + $params{Filters} = [ ] unless defined $params{Filters}; # Sanity check the filters - if ( exists $params{Filters} and defined $params{Filters} - and ref( $params{Filters} ) and ref( $params{Filters} ) eq 'ARRAY' - and scalar @{ $params{Filters} } > 0 ) { + if ( ref $params{Filters} eq 'ARRAY') { # Check the elements foreach my $elem ( @{ $params{Filters} } ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |