X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/ab2a3ce27dfc911941e11f1e1905dfd528cb562b..7b37959603b1b0d69bd1b95f95d68fbde7d3c04f:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 892e7aa..f696818 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1,19 +1,24 @@ =encoding utf8 +=for comment +A Windows-specific commit that may need mention (does this have any +user-visible effects?): +0c38a57 Remove exports of dummy set[ug]id functions on Windows + =head1 NAME [ this is a template for a new perldelta file. Any text flagged as XXX needs to be processed before release. ] -perldelta - what is new for perl v5.17.3 +perldelta - what is new for perl v5.17.5 =head1 DESCRIPTION -This document describes differences between the 5.17.2 release and the 5.17.3 +This document describes differences between the 5.17.4 release and the 5.17.5 release. -If you are upgrading from an earlier release such as 5.17.1, first read -L, which describes differences between 5.17.1 and 5.17.2. +If you are upgrading from an earlier release such as 5.17.3, first read +L, which describes differences between 5.17.3 and 5.17.4. =head1 Notice @@ -27,12 +32,13 @@ here, but most should go in the L section. [ List each enhancement as a =head2 entry ] -=head2 Computed Labels +=head2 Upgrade to Unicode 6.2 -The loop controls C, C and C, and the special C -operator, now allow arbitrary expressions to be used to compute labels at run -time. Previously, any argument that was not a constant was treated as the -empty string. +Perl now supports the final version of Unicode 6.2. Earlier releases in +the 5.17 series supported Unicode 6.2 beta versions. There were no +substantive changes in the final Unicode 6.2 version from the most +recent beta, included in Perl 5.17.4. A list of changes from Unicode +6.1 is at L. =head1 Security @@ -42,30 +48,55 @@ L section. [ List each security issue as a =head2 entry ] -=head1 Incompatible Changes +=head2 Avoid calling memset with a negative count -[ List each incompatible change as a =head2 entry ] +Poorly written perl code that allows an attacker to specify the count to perl's +C string repeat operator can already cause a memory exhaustion +denial-of-service attack. A flaw in versions of perl before 5.15.5 can escalate +that into a heap buffer overrun; coupled with versions of glibc before 2.16, it +possibly allows the execution of arbitrary code. -=head2 C<$ENV{foo}=undef> deletes value from environ, like C +The flaw addressed to this commit has been assigned identifier CVE-2012-5195. -This facilitates use of C with C<%ENV> entries. In previous versions -of Perl, C was converted to the empty string. +=head1 Incompatible Changes -=head2 Defined values stored in environment are forced to byte strings +XXX For a release on a stable branch, this section aspires to be: -A value stored in an environment variable has always been stringified. In this -release, it is converted to be only a byte string. First, it is forced to be a -only a string. Then if the string is utf8 and the equivalent of -C works, that result is used; otherwise, the equivalent of -C is used, and a warning is issued about wide characters -(L). + There are no changes intentionally incompatible with 5.XXX.XXX + If any exist, they are bugs, and we request that you submit a + report. See L below. -=head2 C now aliases the global C<$_> +[ List each incompatible change as a =head2 entry ] -Instead of assigning to an implicit lexical C<$_>, C now makes the -global C<$_> an alias for its argument, just like C. However, it -still uses lexical C<$_> if there is lexical C<$_> in scope (again, just like -C) [perl #114020]. +=head2 New Restrictions in Multi-Character Case-Insensitive Matching in Regular Expression Bracketed Character Classes + +Unicode has now withdrawn their previous recommendation for regular +expressions to automatically handle cases where a single character can +match multiple characters case-insensitively; for example, the letter +LATIN SMALL LETTER SHARP S and the sequence C. This is because +it turns out to be impracticable to do this correctly in all +circumstances. Because Perl has tried to do this as best it can, it +will continue to do so. (We are considering an option to turn it off.) +However, a new restriction is being added on such matches when they +occur in [bracketed] character classes. People were specifying +things such as C, and being surprised that it matches the +two character sequence C (since LATIN SMALL LETTER SHARP S occurs in +this range). This behavior is also inconsistent with the using a +property instead of a range: C<\p{Block=Latin1}> also includes LATIN +SMALL LETTER SHARP S, but C does not match C. +The new rule is that for there to be a multi-character case-insensitive +match within a bracketed character class, the character must be +explicitly listed, and not as an end point of a range. This more +closely obeys the Principle of Least Astonishment. See +L. Note that a bug [perl +#89774], now fixed as part of this change, prevented the previous +behavior from working fully. + +=head2 Change to Warnings About Lexical Subroutines + +The warnings category for lexical subroutines is now +"experimental::lexical_subs", with two colons, not +"experimental:lexical_subs"; =head1 Deprecations @@ -118,174 +149,148 @@ XXX =item * -L has been upgraded from version 1.36 to 1.37. All C and C -and more SV-related flag values are now provided as constants in the C -namespace and available for export. The default export list has not changed. +L has been upgraded from version 5.72 to 5.73. =item * -L has been upgraded from version 0.91 to 0.92. The C<-nobanner> -option has been fixed, and Cs can now be dumped. When passed a sub -name to dump, it will check also to see whether it is the name of a format. If -a sub and a format share the same name, it will dump both. +L has been upgraded from version 1.17 to 1.18. It no longer +dies when deparsing C without arguments. It now correctly omits the +comma for C and C. =item * -L has been upgraded from version 1.17 to 1.18. This adds support -(experimentally) for C, which will be added in Perl 5.17.4. +L, L and L have been upgraded from version 0.30 to +0.31. The overrides for C and C have been rewritten, eliminating +several problems, and making one incompatible change: -=item * - -L has been upgraded from version 1.15 to 1.16. It now deparses -loop controls with the correct precedence, and multiple statements in a -C line are also now deparsed correctly. +=over =item * -L has been upgraded from version 3.59 to 3.60. Unrecognized HTML escape -sequences are now handled better, problematic trailing newlines are no longer -inserted after EformE tags by C or C, and -bogus "Insecure Dependency" warnings appearing with some versions of perl are -now worked around. +Formerly, whichever of C or C was compiled later +would take precedence over the other, causing C and C not to +respect the other pragma when in scope. =item * -L has been upgraded from version 2.05201 to 2.055. The -misuse of Perl's "magic" API has been fixed. +Using any of these three pragmata would cause C and C anywhere +else in the program to evalute their arguments in list context and prevent +them from inferring $_ when called without arguments. =item * -L has been upgraded from version 2.05401 to 2.056. The -misuse of Perl's "magic" API has been fixed. +Using any of these three pragmata would make C return 1234 +(for any number not beginning with 0) anywhere in the program. Now "1234" +is translated from octal to decimal, whether within the pragma's scope or +not. =item * -L has been upgraded from version 2.052 to 2.055. -C, C, C and C have been -speeded up by making parameter validation more efficient. +The global overrides that facilitate lexical use of C and C now +respect any existing overrides that were in place before the new overrides +were installed, falling back to them outside of the scope of C. =item * -L has been upgraded from version 2.135_06 to 2.135_07. It has -been optimized to only build a seen-scalar hash as necessary, thereby speeding -up serialization drastically. - -=item * +C, C and similar invocations for bigint +and bigrat now export a C or C function, instead of providing a +global override. -L has been upgraded from version 1.08 to 1.09. The only change -has been to the test script, to account for changes to some flags in perl's -internals. +=back =item * -L has been upgraded from version 2.44 to 2.47. The Mac alias x-mac-ce -has been added, and various bugs have been fixed in Encode::Unicode, -Encode::UTF7 and Encode::GSM0338. +L has been upgraded from version 1.26 to 1.27. The C and +C functions are now documented. =item * -L has been upgraded from version 0.40 to 0.4003. A minor bug -fix allows markup to be used around the leading "Name" in a POD "abstract" -line, and some documentation improvements have been made. +L has been upgraded from version 1.98 to 1.99_51. =item * -L has been upgraded from version 2.69 to 2.70. Version -information is now stored as a delta, which greatly reduces the size of the -F file. +L has been upgraded from version 0.9131 to 0.9133. =item * -L has been upgraded from version 0.50 to 0.54. -Various enhancements include the new use of Module::Metadata. +L has been upgraded from version 2.135_07 to 2.136. This promotes +the previous development release to a stable release. =item * -L has been upgraded from version 1.000009 to 1.000011. The -creation of a Module::Metadata object for a typical module file has been sped -up by about 40%, and some spurious warnings about C<$VERSION>s have been -suppressed. +L has been upgraded from version 5.71 to 5.72. =item * -L has been upgraded from version 4.0 to 4.3. Amongst other -changes, triggers are now allowed on events, which gives a powerful way to -modify behaviour. +L has been upgraded from version 0.280208 to 0.280209. A +list of symbols to export can now be passed to C when on Windows, as on +other OSes [perl #115100]. =item * -L has been upgraded from version 5.0150040 to 5.0150041. This -contains a couple of minor corrections and lists one new editor. +L has been upgraded from version 1.30 to 1.31. =item * -L has been upgraded from version 3.20 to 3.23. Numerous -improvements have been made, mostly to Pod::Simple::XHTML, which also has a -compatibility change: the C option is now disabled by -default. See F for the full details. +L has been upgraded from version 1.17 to 1.18. A +space-separated list of patterns return long lists of results no longer +results in memory corruption or crashes. This bug was introduced in Perl +5.16.0. [perl #114984] =item * -L has been upgraded from version 0.21 to 0.22. Single character [class]es -like C or C are now optimized as if they did not have the -brackets, i.e. C or C. +L has been upgraded from version 0.022 to 0.024. This improves +SSL support. =item * -L has been upgraded from version 2.002 to 2.004. Constants and -functions required for IP multicast source group membership have been added. +L has been upgraded from version 2.73 to 2.74. =item * -L has been upgraded from version 2.37 to 2.38. It can now freeze and -thaw vstrings correctly. This causes a slight incompatible change in the -storage format, so the format version has increased to 2.9. +L has been upgraded from version 0.15 to 0.16. This is +the module implementing the ":encoding(...)" I/O layer. It no longer +corrupts memory or crashes when the encoding back-end reallocates the +buffer or gives it a typeglob or shared hash key scalar. =item * -L has been upgraded from version 0.29 to 0.30. An issue with -C on Windows and a build problem on Haiku-OS have been -resolved, and is no longer called when the port is specified. +L has been upgraded from version 1.41 to 1.42. This adds +support for dual-valued values as created by +L. =item * -L has been upgraded from version 1.09 to 1.10. This fixes the -use of the B and B shells on Windows in the event that the current -drive happens to contain a F<\dev\tty> file. +L hsa been upgraded from version 0.89 to 0.90. =item * -L and L have been upgraded from version 2009.0305 to -2012.0818. Support for Unicode combining characters has been added to them -both. +L has been upgraded from version 1.14 to 1.15. =item * -L has been upgraded from version 1.2000 to 1.2300. Seconds values -greater than 59 but less than 60 no longer cause C and C -to croak. +L has been upgraded from version 1.14 to 1.15. =item * -L has been upgraded from version 0.44 to 0.45. This has been -modified slightly for reasons of perl internal use only. +L has been upgraded from version 0.03 to 0.04. -=item * +=back -L has been upgraded from version 0.44 to 0.45. New APIs have been added -for getting and setting the current code page. +=head2 Removed Modules and Pragmata + +=over 4 =item * -L has been upgraded from version 0.02 to 0.03. The use of -PERL_NO_GET_CONTEXT here has resulted in smaller machine code. +XXX =back =head1 Documentation -XXX Changes to files in F go here. Consider grouping entries by file and -be sure to link to the appropriate page, e.g. L. +XXX Changes to files in F go here. Consider grouping entries by +file and be sure to link to the appropriate page, e.g. L. =head2 New Documentation @@ -301,26 +306,13 @@ XXX Changes which significantly change existing files in F go here. However, any changes to F should go in the L section. -=head3 L, L - -=over 4 - -=item * - -Loop control verbs (C, C, C, C and C) have always -had the same precedence as assignment operators, but this was not documented -until now. - -=back - -=head3 L +=head3 L =over 4 =item * -A caveat has been added to the documentation for C<$_> warning against the use -of lexical C<$_> [perl #114020]. +XXX Description of the change here =back @@ -344,21 +336,7 @@ and New Warnings =item * -L - -This message now occurs when a here document label has an initial quotation -mark but the final quotation mark is missing. - -This replaces a bogus and misleading error message about not finding the label -itself [perl #114104]. - -=item * - -L - -This error is thrown when a child pseudo-process in the ithreads implementation -on Windows was not scheduled within the time period allowed and therefore was -not able to initialize properly [perl #88840]. +XXX L =back @@ -368,10 +346,7 @@ not able to initialize properly [perl #88840]. =item * -L - -Attempts to put wide characters into environment variables via C<%ENV> now -provoke this warning. +XXX L =back @@ -383,7 +358,9 @@ XXX Changes (i.e. rewording) of diagnostic messages go here =item * -XXX Describe change here +The error produced when a module cannot be loaded now includes a hint that +the module may need to be installed: "Can't locate hopping.pm in @INC (you +may need to install the hopping module) (@INC contains: ...)" =back @@ -396,13 +373,13 @@ Most of these are built within the directories F and F. entries for each change Use L with program names to get proper documentation linking. ] -=head3 L +=head3 L =over 4 =item * -XXX +F no longer produces invalid code for empty defines. [perl #20636] =back @@ -419,10 +396,7 @@ L section, instead. =item * -The pager detection in F has been improved to allow responses which -specify options after the program name, e.g. B, if the user -accepts the default value. This helps B when handling ANSI escapes -[perl #72156]. +XXX =back @@ -468,13 +442,13 @@ XXX =head2 Discontinued Platforms +XXX List any platforms that this version of perl no longer compiles on. + =over 4 -=item UTS Global +=item MPE/IX -Support code relating to UTS global has been removed. UTS was a mainframe -version of System V created by Amdahl, subsequently sold to UTS Global. The -port has not been touched since before 5.8.0, and UTS Global is now defunct. +Support for MPE/IX has been removed. =back @@ -487,21 +461,9 @@ L section. =over 4 -=item Windows +=item Win32 -A new makefile option, USE_64_BIT_INT, has been added to the Windows makefiles. -Set this to "define" when building a 32-bit perl if you want it to use 64-bit -integers. - -Machine code size reductions, already made to the DLLs of XS modules in Perl -5.17.2, have now been extended to the perl DLL itself. - -Building with VC++ 6.0 was inadvertently broken in Perl 5.17.2 but has now been -fixed again. - -=item VMS - -The B build has been fixed for the HP C++ compiler on OpenVMS. +The option to build without USE_SOCKETS_AS_HANDLES has been removed. =back @@ -517,7 +479,55 @@ well. =item * -XXX +Case-insensitive matching inside a [bracketed] character class with a +multi-character fold, no longer excludes one of the possibilities in the +circumstances that it used to. [perl #89774]. + +=item * + +C has been removed. + +=item * + +The regular expression engine no longer reads one byte past the end of the +target string. While for all internally well-formed scalars this should +never have been a problem, this change facilitates clever tricks with +string buffers in CPAN modules. [perl #73542] + +=item * + +Inside a BEGIN block, C now points to the currently-compiling +subroutine, rather than the BEGIN block itself. + +=item * + +C has been deprecated. + +=item * + +C now always returns a byte count and C a character +count. Previously, C and C were both buggy and would +sometimes returns bytes and sometimes characters. C no longer +assumes that its argument is in UTF8. Neither of these creates UTF8 caches +for tied or overloaded values or for non-PVs any more. + +=item * + +C now copies string buffers of shared hash key scalars when +called from XS modules [perl #79824]. + +=item * + +C and C are no longer used. They are now +#defined as 0. + +=item * + +The new C flag can be set by custom regular expression +engines to indicate that the execution of the regular expression may cause +variables to be modified. This lets C know to skip certain +optimisations. Perl's own regular expression engine sets this flag for the +special backtracking verbs that set $REGMARK and $REGERROR. =back @@ -532,176 +542,178 @@ files in F and F are best summarized in L. =item * -C<\w> now matches the code points U+200C (ZERO WIDTH NON-JOINER) and U+200D -(ZERO WIDTH JOINER). C<\W> no longer matches these. This change is because -Unicode corrected their definition of what C<\w> should match. +A bug, case-insensitive regex with UTF8-flagged strings, introduced +earlier in the 5.17 series has been fixed. [perl #114982] =item * -C no longer leaks its label. +Attributes applied to lexical variables no longer leak memory. +[perl #114764] =item * -Constant folding no longer changes the behaviour of functions like C -and C that can take either filenames or handles. -C nows treats its argument as a file name (since it is an -arbitrary expression), rather than the handle "foo". +C, C, C, C, C or C followed by a +bareword (or version) and then an infix operator is no longer a syntax +error. It used to be for those infix operators (like C<+>) that have a +different meaning where a term is expected. [perl #105924] =item * -C no longer falls back to treating "FOO" as a file name if -the filehandle has been deleted. This was broken in Perl 5.16.0. +C and C no longer produce erroneous +ambiguity warnings. [perl #107002] =item * -Subroutine redefinitions after sub-to-glob and glob-to-glob assignments no -longer cause double frees or panic messages. +Class method calls are now allowed on any string, and not just strings +beginning with an alphanumeric character. [perl #105922] =item * -C now turns vstrings into plain strings when performing a substitution, -even if the resulting string is the same (C). +An empty pattern created with C used in C no longer triggers +the "empty pattern reuses last pattern" behaviour. [perl #96230] =item * -Prototype mismatch warnings no longer erroneously treat constant subs as having -no prototype when they actually have "". +Tying a hash during iteration no longer results in a memory leak. =item * -Constant subroutines and forward declarations no longer prevent prototype -mismatch warnings from omitting the sub name. +Freeing a tied hash during iteration no longer results in a memory leak. =item * -C on a subroutine now clears call checkers. +List assignment to a tied array or hash that dies on STORE no longer +results in a memory leak. =item * -The C operator started leaking memory on blessed objects in Perl 5.16.0. -This has been fixed [perl #114340]. +If the hint hash (C<%^H>) is tied, compile-time scope entry (which copies +the hint hash) no longer leaks memory if FETCH dies. [perl #107000] =item * -C no longer tries to parse its arguments as a statement, making -C a syntax error [perl #114222]. +Constant folding no longer inappropriately triggers the special +C behaviour. [perl #94490] =item * -On debugging builds, "uninitialized" warnings inside formats no longer cause -assertion failures. +C, C, and similar constructs +now treat the argument to C as a simple scalar. [perl #97466] =item * -On debugging builds, subroutines nested inside formats no longer cause -assertion failures [perl #78550]. +Running a custom debugging that defines no C<*DB::DB> glob or provides a +subroutine stub for C<&DB::DB> no longer results in a crash, but an error +instead. [perl #114990] =item * -Formats and C statements are now permitted inside formats. +C now matches its documentation. C only resets C +patterns when called with no argument. An empty string for an argument now +does nothing. (It used to be treated as no argument.) [perl #97958] =item * -C and C()> now always produce the same output. It -was possible for the latter to refuse to close over $x if the variable was not -active; e.g., if it was defined outside a currently-running named subroutine. +C with an argument returning an empty list no longer reads past the +end of the stack, resulting in erratic behaviour. [perl #77094] =item * -Similarly, C and C now produce the same output. -This also allows "my $x if 0" variables to be seen in the debugger [perl -#114018]. +C<--subname> no longer produces erroneous ambiguity warnings. +[perl #77240] =item * -Formats called recursively no longer stomp on their own lexical variables, but -each recursive call has its own set of lexicals. +C is now allowed as a label or package name. This was inadvertently +broken when v-strings were added in Perl 5.6. [perl #56880] =item * -Attempting to free an active format or the handle associated with it no longer -results in a crash. +A regression introduced in 5.17.2 has been fixed, which made C +result in a "panic" error. [perl #115050] =item * -Format parsing no longer gets confused by braces, semicolons and low-precedence -operators. It used to be possible to use braces as format delimiters (instead -of C<=> and C<.>), but only sometimes. Semicolons and low-precedence operators -in format argument lines no longer confuse the parser into ignoring the line's -return value. In format argument lines, braces can now be used for anonymous -hashes, instead of being treated always as C blocks. +C, C, C and C could be confused by ties, +overloading, references and typeglobs if the stringification of such +changed the internal representation to or from UTF8. [perl #114410] =item * -Formats can now be nested inside code blocks in regular expressions and other -quoted constructs (C and C) [perl #114040]. +utf8::encode now calls FETCH and STORE on tied variables. utf8::decode now +calls STORE (it was already calling FETCH). =item * -Formats are no longer created after compilation errors. +C<$tied =~ s/$non_utf8/$utf8/> no longer loops infinitely if the tied +variable returns a Latin-1 string, shared hash key scalar, or reference or +typeglob that stringifies as ASCII or Latin-1. This is a regression from +5.12.x. =item * -Some format syntax errors started causing crashes in Perl 5.17.2, but have now -been fixed. - -=item * +C without /e is now better at detecting when it needs to forego +certain optimisations, fixing some buggy cases: -Under debugging builds, the B<-DA> command line option started crashing in Perl -5.16.0. It has been fixed [perl #114368]. +=over =item * -Scope::Escape compatibility, which was broken in Perl 5.17.2, has been restored -[perl #113872]. +Match variables in certain constructs (C<&&>, C<||>, C<..> and others) in +the replacement part; e.g., C. [perl #26986] =item * -A potential deadlock scenario involving the premature termination of a -pseudo-forked child in a Windows build with ithreads enabled has been fixed. -This resolves the common problem of the F test hanging on Windows -[perl #88840]. +Aliases to match variables in the replacement. =item * -The microperl build, broken since Perl 5.15.7, has now been restored. +$REGERROR or $REGMARK in the replacement. [perl #49190] =item * -The code which generates errors from C could potentially read one or -two bytes before the start of the filename for filenames less than three bytes -long and ending C. This has now been fixed. Note that it could -never have happened with module names given to C or C anyway. +An empty pattern (C) that causes the last-successful pattern to +be used, when that pattern contains code blocks that modify the variables +in the replacement. + +=back =item * -The handling of pathnames of modules given to C has been made -thread-safe on VMS. +The taintedness of the replacement string no longer affects the taintedness +of the return value of C. =item * -The C API function, the entry point for perl's regex compiler, -was accidentally changed in Perl 5.17.1 to operate on the current engine. This -has now been restored to its former core-engine-specific state [perl #114302]. +The C<$|> autoflush variable is created on-the-fly when needed. If this +happened (e.g., if it was mentioned in a module or eval) when the +currently-selected filehandle was a typeglob with an empty IO slot, it used +to crash. [perl #115206] =item * -Perl 5.17.1 introduced a memory leak into the re-use of run-time regexes where -the pattern hasn't changed (i.e. C). This has now been fixed. +Line numbers at the end of a string eval are no longer off by one. +[perl #114658] =item * -A bug in the compilation of a C expression which affected the TryCatch -test suite has been fixed [perl #114242]. +@INC filters (subroutines returned by subroutines in @INC) that set $_ to a +copy-on-write scalar no longer cause the parser to modify that string +buffer in place. =item * -Formats no longer leak. They started leaking in 5.17.2. +C no longer returns the undefined value if the object has +string overloading that returns undef. [perl #115260] =item * -Pod can now be nested in code inside a quoted construct outside of a string -eval. This used to work only within string evals [perl #114040]. +The use of C, the stash name lookup cache for method calls, has +been restored, + +Commit da6b625f78f5f133 in August 2011 inadvertently broke the code that looks +up values in C. As it's a only cache, quite correctly everything +carried on working without it. =back @@ -730,7 +742,7 @@ here. XXX Generate this with: - perl Porting/acknowledgements.pl v5.17.2..HEAD + perl Porting/acknowledgements.pl v5.17.4..HEAD =head1 Reporting Bugs