]> mj.ucw.cz Git - libucw.git/blobdiff - lib/perl/CGI.pm
obj_add_attr_ref() with an on-stack buffer is not advisable, better
[libucw.git] / lib / perl / CGI.pm
index 462b0c43242ef41a7b1b3647c8605e249f5c05c1..aeb6c50504a52a4c8bdda50fa4e11cd1d087ebd5 100644 (file)
@@ -1,6 +1,7 @@
 #      Poor Man's CGI Module for Perl
 #
 #      (c) 2002 Martin Mares <mj@ucw.cz>
+#      Slightly modified by Tomas Valla <tom@ucw.cz>
 #
 #      This software may be freely distributed and used according to the terms
 #      of the GNU Lesser General Public License.
@@ -23,8 +24,7 @@ BEGIN {
 
 sub url_escape($) {
        my $x = shift @_;
-       $x =~ s/([^-\$_.!*'(),0-9A-Za-z\x80-\xff ])/"%".unpack('H2',$1)/ge;
-       $x =~ s/ /+/g;
+       $x =~ s/([^-\$_.!*'(),0-9A-Za-z\x80-\xff])/"%".unpack('H2',$1)/ge;
        return $x;
 }
 
@@ -54,15 +54,26 @@ sub parse_arg_string($) {
                if (my $rx = $arg->{'check'}) {
                        if (!/^$rx$/) { $_ = $arg->{'default'}; }
                }
-               ${$arg->{'var'}} = $_;
+               
+               my $r = ref($arg->{'var'});
+               if ($r eq 'SCALAR') {
+                       ${$arg->{'var'}} = $_;
+               } elsif ($r eq 'ARRAY') {
+                       push @{$arg->{'var'}}, $_;
+               }
        }
 }
 
 sub parse_args($) {
        $arg_table = shift @_;
        foreach my $a (values %$arg_table) {
+               my $r = ref($a->{'var'});
                defined($a->{'default'}) or $a->{'default'}="";
-               ${$a->{'var'}} = $a->{'default'};
+               if ($r eq 'SCALAR') {
+                       ${$a->{'var'}} = $a->{'default'};
+               } elsif ($r eq 'ARRAY') {
+                       @{$a->{'var'}} = ();
+               }
        }
        defined $ENV{"GATEWAY_INTERFACE"} or die "Not called as a CGI script";
        my $method = $ENV{"REQUEST_METHOD"};