diff options
author | Chris 'BinGOs' Williams <chris@bingosnet.co.uk> | 2012-11-10 12:31:46 +0000 |
---|---|---|
committer | Chris 'BinGOs' Williams <chris@bingosnet.co.uk> | 2012-11-10 12:31:46 +0000 |
commit | 11911e219c403b8773ab8f4e97d5fb23c092aa86 (patch) | |
tree | 987f0c63a74ac1952e57911fda410e20dcde01e7 /cpan | |
parent | a744a0b79f6753f746bf37af2c776208590aef91 (diff) | |
download | perl-11911e219c403b8773ab8f4e97d5fb23c092aa86.tar.gz |
Update CGI to CPAN version 3.62
[DELTA]
Version 3.62, Nov 9th, 2012
[INTERNALS]
- Changed how the deprecated endform function was defined for compatibilty
with the development version of Perl.
- Fix failures in t/tmpdir.t when run as root
https://github.com/markstos/CGI.pm/issues/22, RT#80659)
- Made it possible to force a sorted order for things like hash
attributes so that tests are not dependent on a particular hash
ordering. This will be required in modern perls which will
change the ordering per process. (Yves, RT#80659)
Diffstat (limited to 'cpan')
-rw-r--r-- | cpan/CGI/Changes | 14 | ||||
-rw-r--r-- | cpan/CGI/lib/CGI.pm | 23 | ||||
-rw-r--r-- | cpan/CGI/lib/CGI/Util.pm | 88 | ||||
-rw-r--r-- | cpan/CGI/t/autoescape.t | 1 | ||||
-rw-r--r-- | cpan/CGI/t/function.t | 3 | ||||
-rw-r--r-- | cpan/CGI/t/html.t | 3 | ||||
-rw-r--r-- | cpan/CGI/t/tmpdir.t | 8 |
7 files changed, 92 insertions, 48 deletions
diff --git a/cpan/CGI/Changes b/cpan/CGI/Changes index de312d9b8e..52f1d02c20 100644 --- a/cpan/CGI/Changes +++ b/cpan/CGI/Changes @@ -1,3 +1,17 @@ + +Version 3.62, Nov 9th, 2012 + + [INTERNALS] + - Changed how the deprecated endform function was defined for compatibilty + with the development version of Perl. + - Fix failures in t/tmpdir.t when run as root + https://github.com/markstos/CGI.pm/issues/22, RT#80659) + + - Made it possible to force a sorted order for things like hash + attributes so that tests are not dependent on a particular hash + ordering. This will be required in modern perls which will + change the ordering per process. (Yves, RT#80659) + Version 3.61 Nov 2nd, 2012 (No code changes) diff --git a/cpan/CGI/lib/CGI.pm b/cpan/CGI/lib/CGI.pm index 8a6cca0afb..d8d91f49c6 100644 --- a/cpan/CGI/lib/CGI.pm +++ b/cpan/CGI/lib/CGI.pm @@ -20,7 +20,7 @@ use Carp 'croak'; # The revision is no longer being updated since moving to git. $CGI::revision = '$Id: CGI.pm,v 1.266 2009/07/30 16:32:34 lstein Exp $'; -$CGI::VERSION='3.61'; +$CGI::VERSION='3.62'; # HARD-CODED LOCATION FOR FILE UPLOAD TEMPORARY FILES. # UNCOMMENT THIS ONLY IF YOU KNOW WHAT YOU'RE DOING. @@ -129,10 +129,6 @@ sub initialize_globals { # ------------------ START OF THE LIBRARY ------------ -#### Method: endform -# This method is DEPRECATED -*endform = \&end_form; - # make mod_perlhappy initialize_globals(); @@ -1960,6 +1956,7 @@ END_OF_FUNC #### Method: end_form # End a form +# Note: This repeated below under the older name. 'end_form' => <<'END_OF_FUNC', sub end_form { my($self,@p) = self_or_default(@_); @@ -1976,6 +1973,22 @@ sub end_form { } END_OF_FUNC +'endform' => <<'END_OF_FUNC', +sub endform { + my($self,@p) = self_or_default(@_); + if ( $NOSTICKY ) { + return wantarray ? ("</form>") : "\n</form>"; + } else { + if (my @fields = $self->get_fields) { + return wantarray ? ("<div>",@fields,"</div>","</form>") + : "<div>".(join '',@fields)."</div>\n</form>"; + } else { + return "</form>"; + } + } +} +END_OF_FUNC + #### Method: end_multipart_form # end a multipart form 'end_multipart_form' => <<'END_OF_FUNC', diff --git a/cpan/CGI/lib/CGI/Util.pm b/cpan/CGI/lib/CGI/Util.pm index b059281d8e..494560e129 100644 --- a/cpan/CGI/lib/CGI/Util.pm +++ b/cpan/CGI/lib/CGI/Util.pm @@ -1,15 +1,19 @@ package CGI::Util; +use base 'Exporter'; require 5.008001; use strict; -require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(rearrange rearrange_header make_attributes unescape escape - expires ebcdic2ascii ascii2ebcdic); +our @EXPORT_OK = qw(rearrange rearrange_header make_attributes unescape escape + expires ebcdic2ascii ascii2ebcdic); -our $VERSION = '3.53'; +our $VERSION = '3.62'; use constant EBCDIC => "\t" ne "\011"; +# This option is not documented and may change or go away. +# The HTML spec does not require attributes to be sorted, +# but it's useful for testing to get a predictable order back. +our $SORT_ATTRIBUTES; + # (ord('^') == 95) for codepage 1047 as on os390, vmesa our @A2E = ( 0, 1, 2, 3, 55, 45, 46, 47, 22, 5, 21, 11, 12, 13, 14, 15, @@ -28,7 +32,7 @@ our @A2E = ( 172,105,237,238,235,239,236,191,128,253,254,251,252,186,174, 89, 68, 69, 66, 70, 67, 71,156, 72, 84, 81, 82, 83, 88, 85, 86, 87, 140, 73,205,206,203,207,204,225,112,221,222,219,220,141,142,223 - ); + ); our @E2A = ( 0, 1, 2, 3,156, 9,134,127,151,141,142, 11, 12, 13, 14, 15, 16, 17, 18, 19,157, 10, 8,135, 24, 25,146,143, 28, 29, 30, 31, @@ -46,7 +50,7 @@ our @E2A = ( 125, 74, 75, 76, 77, 78, 79, 80, 81, 82,185,251,252,249,250,255, 92,247, 83, 84, 85, 86, 87, 88, 89, 90,178,212,214,210,211,213, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,179,219,220,217,218,159 - ); + ); if (EBCDIC && ord('^') == 106) { # as in the BS2000 posix-bc coded character set $A2E[91] = 187; $A2E[92] = 188; $A2E[94] = 106; $A2E[96] = 74; @@ -77,7 +81,7 @@ sub rearrange { my ($order,@param) = @_; my ($result, $leftover) = _rearrange_params( $order, @param ); push @$result, make_attributes( $leftover, defined $CGI::Q ? $CGI::Q->{escape} : 1 ) - if keys %$leftover; + if keys %$leftover; @$result; } @@ -95,30 +99,30 @@ sub _rearrange_params { return [] unless @param; if (ref($param[0]) eq 'HASH') { - @param = %{$param[0]}; + @param = %{$param[0]}; } else { - return \@param - unless (defined($param[0]) && substr($param[0],0,1) eq '-'); + return \@param + unless (defined($param[0]) && substr($param[0],0,1) eq '-'); } # map parameters into positional indices my ($i,%pos); $i = 0; foreach (@$order) { - foreach (ref($_) eq 'ARRAY' ? @$_ : $_) { $pos{lc($_)} = $i; } - $i++; + foreach (ref($_) eq 'ARRAY' ? @$_ : $_) { $pos{lc($_)} = $i; } + $i++; } my (@result,%leftover); $#result = $#$order; # preextend while (@param) { - my $key = lc(shift(@param)); - $key =~ s/^\-//; - if (exists $pos{$key}) { - $result[$pos{$key}] = shift(@param); - } else { - $leftover{$key} = shift(@param); - } + my $key = lc(shift(@param)); + $key =~ s/^\-//; + if (exists $pos{$key}) { + $result[$pos{$key}] = shift(@param); + } else { + $leftover{$key} = shift(@param); + } } return \@result, \%leftover; @@ -132,18 +136,22 @@ sub make_attributes { my $quote = $do_not_quote ? '' : '"'; + my @attr_keys= keys %$attr; + if ($SORT_ATTRIBUTES) { + @attr_keys= sort @attr_keys; + } my(@att); - foreach (keys %{$attr}) { - my($key) = $_; - $key=~s/^\-//; # get rid of initial - if present + foreach (@attr_keys) { + my($key) = $_; + $key=~s/^\-//; # get rid of initial - if present - # old way: breaks EBCDIC! - # $key=~tr/A-Z_/a-z-/; # parameters are lower case, use dashes + # old way: breaks EBCDIC! + # $key=~tr/A-Z_/a-z-/; # parameters are lower case, use dashes - ($key="\L$key") =~ tr/_/-/; # parameters are lower case, use dashes + ($key="\L$key") =~ tr/_/-/; # parameters are lower case, use dashes - my $value = $escape ? simple_escape($attr->{$_}) : $attr->{$_}; - push(@att,defined($attr->{$_}) ? qq/$key=$quote$value$quote/ : qq/$key/); + my $value = $escape ? simple_escape($attr->{$_}) : $attr->{$_}; + push(@att,defined($attr->{$_}) ? qq/$key=$quote$value$quote/ : qq/$key/); } return @att; } @@ -176,19 +184,19 @@ sub unescape { if (EBCDIC) { $todecode =~ s/%([0-9a-fA-F]{2})/chr $A2E[hex($1)]/ge; } else { - # handle surrogate pairs first -- dankogai. Ref: http://unicode.org/faq/utf_bom.html#utf16-2 - $todecode =~ s{ - %u([Dd][89a-bA-B][0-9a-fA-F]{2}) # hi - %u([Dd][c-fC-F][0-9a-fA-F]{2}) # lo - }{ - utf8_chr( - 0x10000 - + (hex($1) - 0xD800) * 0x400 - + (hex($2) - 0xDC00) - ) - }gex; + # handle surrogate pairs first -- dankogai. Ref: http://unicode.org/faq/utf_bom.html#utf16-2 + $todecode =~ s{ + %u([Dd][89a-bA-B][0-9a-fA-F]{2}) # hi + %u([Dd][c-fC-F][0-9a-fA-F]{2}) # lo + }{ + utf8_chr( + 0x10000 + + (hex($1) - 0xD800) * 0x400 + + (hex($2) - 0xDC00) + ) + }gex; $todecode =~ s/%(?:([0-9a-fA-F]{2})|u([0-9a-fA-F]{4}))/ - defined($1)? chr hex($1) : utf8_chr(hex($2))/ge; + defined($1)? chr hex($1) : utf8_chr(hex($2))/ge; } return $todecode; } diff --git a/cpan/CGI/t/autoescape.t b/cpan/CGI/t/autoescape.t index 411729823b..3a25c2d96a 100644 --- a/cpan/CGI/t/autoescape.t +++ b/cpan/CGI/t/autoescape.t @@ -6,6 +6,7 @@ use warnings; use Test::More tests => 18; use CGI qw/ autoEscape escapeHTML button textfield password_field textarea popup_menu scrolling_list checkbox_group optgroup checkbox radio_group submit image_button button /; +$CGI::Util::SORT_ATTRIBUTES = 1; is (button(-name => 'test<'), '<input type="button" name="test<" value="test<" />', "autoEscape defaults to On"); diff --git a/cpan/CGI/t/function.t b/cpan/CGI/t/function.t index e0c08451ed..a15c010dd9 100644 --- a/cpan/CGI/t/function.t +++ b/cpan/CGI/t/function.t @@ -5,6 +5,7 @@ END {print "not ok 1\n" unless $loaded;} use Config; use CGI (':standard','keywords'); $loaded = 1; +$CGI::Util::SORT_ATTRIBUTES = 1; print "ok 1\n"; ######################### End of black magic. @@ -103,4 +104,4 @@ test(30, !charset("") && header() eq "Content-Type: text/html${CRLF}${CRLF}", "E test(31, header(-foo=>'bar') eq "Foo: bar${CRLF}Content-Type: text/html${CRLF}${CRLF}", "Custom header"); -test(32, start_form(-action=>'one',name=>'two',onsubmit=>'three') eq qq(<form method="post" action="one" enctype="multipart/form-data" onsubmit="three" name="two">), "initial dash followed by undashed arguments"); +test(32, start_form(-action=>'one',name=>'two',onsubmit=>'three') eq qq(<form method="post" action="one" enctype="multipart/form-data" name="two" onsubmit="three">), "initial dash followed by undashed arguments") diff --git a/cpan/CGI/t/html.t b/cpan/CGI/t/html.t index 09a3e33a49..efa2f03d30 100644 --- a/cpan/CGI/t/html.t +++ b/cpan/CGI/t/html.t @@ -5,6 +5,7 @@ use Test::More tests => 33; END { ok $loaded; } use CGI ( ':standard', '-no_debug', '*h3', 'start_table' ); $loaded = 1; +$CGI::Util::SORT_ATTRIBUTES= 1; ok 1; BEGIN { @@ -98,7 +99,7 @@ is start_html( <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> <head> <title>The world of foo</title> -<script src="foo.js" charset="utf-8" type="text/javascript"></script> +<script charset="utf-8" src="foo.js" type="text/javascript"></script> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> diff --git a/cpan/CGI/t/tmpdir.t b/cpan/CGI/t/tmpdir.t index 717cd8c75a..cf9d7164c4 100644 --- a/cpan/CGI/t/tmpdir.t +++ b/cpan/CGI/t/tmpdir.t @@ -1,7 +1,11 @@ #!perl -use Test::More tests => 9; +use Test::More; use strict; +if( $> == 0 ) { + plan skip_all => "Root can write to 'unwritable files', so many of these tests don't make sense for root."; +} + my ($testdir, $testdir2); BEGIN { @@ -34,4 +38,6 @@ isnt($CGITempFile::TMPDIRECTORY, $testdir2, isnt($CGITempFile::TMPDIRECTORY, $testdir, "unwritable \$ENV{TMPDIR} not overridden with an unwritable \$CGITempFile::TMPDIRECTORY"); +done_testing(); + END { for ($testdir, $testdir2) { chmod 0700, $_; rmdir; } } |