From 3d68959f4b88e0dc5b7d9ee1c53fc59a3d4fe40b Mon Sep 17 00:00:00 2001 From: Yuriy Nevinitsin <nevinitsin@corp.mail.ru> Date: Fri, 26 Nov 2010 15:34:17 +0300 Subject: [PATCH] [box] [client] [perl] Fix _validate_params() not to clobber a param. Fix update/splice for compatiblity with older perls. --- mod/silverbox/client/perl/lib/MR/SilverBox.pm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mod/silverbox/client/perl/lib/MR/SilverBox.pm b/mod/silverbox/client/perl/lib/MR/SilverBox.pm index 76d350d7ad..d8dd642cc4 100644 --- a/mod/silverbox/client/perl/lib/MR/SilverBox.pm +++ b/mod/silverbox/client/perl/lib/MR/SilverBox.pm @@ -195,7 +195,7 @@ sub _raise { sub _validate_param { my ($self, $args, @pnames) = @_; - my $param = ref $args->[-1] eq 'HASH' ? pop @$args: {}; + my $param = ref $args->[-1] eq 'HASH' ? {%{pop @$args}}: {}; foreach my $pname (keys %$param) { confess "$self->{name}: unknown param $pname\n" if 0 == grep { $_ eq $pname } @pnames; @@ -354,6 +354,7 @@ sub _PackSelect { my $f = $namespace->{byfield_unpack_format}; $param->{unpack_format} = join '', map { $f->[$_->{field}] } @{$param->{format}}; $format = pack 'l*', scalar @{$param->{format}}, map { + $_ = { %$_ }; if($_->{full}) { $_->{offset} = 0; $_->{length} = 'max'; @@ -504,7 +505,7 @@ my %update_ops = ( $_[0]->[0] = pack 'l', $_[0]->[0]; $_[0]->[1] = defined $_[0]->[1] ? pack 'l', $_[0]->[1] : ''; $_[0]->[2] = '' unless defined $_[0]->[2]; - return (OP_SPLICE, [ pack '(w/a)*', @{$_[0]} ]); + return (OP_SPLICE, [ pack '(w/a*)*', @{$_[0]} ]); }, append => sub { splice => [undef, 0, $_[0]] }, prepend => sub { splice => [0, 0, $_[0]] }, -- GitLab