23147022 problem in UTILITY/PERL s11u3-sru
authorVladimir Marek <Vladimir.Marek@oracle.com>
Mon, 16 May 2016 14:46:20 +0200
branchs11u3-sru
changeset 6016 a477397bba8b
parent 6015 cf9d441012dc
child 6035 c9748fcc32de
23147022 problem in UTILITY/PERL
components/perl512/patches/0003-perl.git-22b433eff9a1ffa2454e18405a56650f07b385b5.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/perl512/patches/0003-perl.git-22b433eff9a1ffa2454e18405a56650f07b385b5.patch	Mon May 16 14:46:20 2016 +0200
@@ -0,0 +1,92 @@
+This patch is modified version of a fix from upstream. This is already fixed in
+perl 5.22.
+
+http://perl5.git.perl.org/perl.git/commitdiff/22b433eff9a1ffa2454e18405a56650f07b385b5
+
+--- perl-5.12.5/regexec.c	2016-05-16 14:45:14.336482535 +0200
++++ perl-5.12.5/regexec.c	2016-05-16 14:40:11.221253416 +0200
+@@ -6124,6 +6124,10 @@ S_reghop3(U8 *s, I32 off, const U8* lim)
+             if (UTF8_IS_CONTINUED(*s)) {
+                 while (s > lim && UTF8_IS_CONTINUATION(*s))
+                     s--;
++                if (! UTF8_IS_START(*s)) {
++                    dTHX;
++                    Perl_croak(aTHX_ "Malformed UTF-8 character (fatal)");
++                }
+ 	    }
+             /* XXX could check well-formedness here */
+ 	}
+@@ -6155,6 +6159,10 @@ S_reghop4(U8 *s, I32 off, const U8* llim
+             if (UTF8_IS_CONTINUED(*s)) {
+                 while (s > llim && UTF8_IS_CONTINUATION(*s))
+                     s--;
++                if (! UTF8_IS_START(*s)) {
++                    dTHX;
++                    Perl_croak(aTHX_ "Malformed UTF-8 character (fatal)");
++                }
+             }
+             /* XXX could check well-formedness here */
+         }
+@@ -6184,6 +6192,10 @@ S_reghopmaybe3(U8* s, I32 off, const U8*
+             if (UTF8_IS_CONTINUED(*s)) {
+                 while (s > lim && UTF8_IS_CONTINUATION(*s))
+                     s--;
++                if (! UTF8_IS_START(*s)) {
++                    dTHX;
++                    Perl_croak(aTHX_ "Malformed UTF-8 character (fatal)");
++                }
+ 	    }
+             /* XXX could check well-formedness here */
+ 	}
+--- perl-5.12.5/t/re/pat.t	Sun Nov  4 00:26:03 2012
++++ perl-5.12.5/t/re/pat.t	Mon May 16 19:37:07 2016
+@@ -23,7 +23,7 @@ BEGIN {
+ }
+ 
+ 
+-plan tests => 309;  # Update this when adding/deleting tests.
++plan tests => 310;  # Update this when adding/deleting tests.
+ 
+ run_tests() unless caller;
+ 
+@@ -32,6 +32,40 @@ run_tests() unless caller;
+ #
+ sub run_tests {
+ 
++    {   # Test that we handle some malformed UTF-8 without looping [perl
++        # #123562]
++
++        # This test uses routines from test.pl. Sadly the routines differ
++        # from what is used by the rest of the file (from ReTest.pl). To make
++        # this test work I load test.pl and run it in my new namespace
++        # MyLocal. The problem is that the function _ok has static variable
++        # holding number of tests executed. We need to have the MyLocal::_ok
++        # replaced by main::_ok so that it's properly accounted for.
++
++        my $code='
++            package MyLocal;
++            do "test.pl"; # needed to load watchdog()
++
++            use Encode qw(_utf8_on);
++            my $malformed = "a\x80\n";
++            _utf8_on($malformed);
++            watchdog(3);
++            $malformed =~ /(\n\r|\r)$/;
++            print q(No infinite loop here!);
++        ';
++        {
++            package MyLocal;
++            do "test.pl";
++            my $ref = \*_ok;
++            *$ref = \*main::_ok;
++        }
++
++        MyLocal::fresh_perl_like($code, qr/Malformed UTF-8 character/, {},
++            "test that we handle some UTF-8 malformations without looping" );
++    }
++
++
++
+     {
+ 
+         my $x = "abc\ndef\n";