5.28.2 bump
This commit is contained in:
parent
98c121bf78
commit
51b53cd3f9
1
.gitignore
vendored
1
.gitignore
vendored
@ -29,3 +29,4 @@ perl-5.12.1.tar.gz
|
||||
/perl-5.26.2.tar.bz2
|
||||
/perl-5.28.0.tar.xz
|
||||
/perl-5.28.1.tar.xz
|
||||
/perl-5.28.2.tar.xz
|
||||
|
@ -14,15 +14,20 @@ diff --git a/Makefile.SH b/Makefile.SH
|
||||
index d1da0a0..7733a32 100755
|
||||
--- a/Makefile.SH
|
||||
+++ b/Makefile.SH
|
||||
@@ -68,7 +68,7 @@ true)
|
||||
${api_revision}.${api_version}.${api_subversion} \
|
||||
-current_version \
|
||||
${revision}.${patchlevel}.${subversion} \
|
||||
- -install_name \$(shrpdir)/\$@"
|
||||
+ -install_name \$(shrpdir)/libperl.${revision}.${patchlevel}.dylib"
|
||||
@@ -70,11 +70,11 @@ true)
|
||||
${revision}.${patchlevel}.${subversion}"
|
||||
case "$osvers" in
|
||||
1[5-9]*|[2-9]*)
|
||||
- shrpldflags="$shrpldflags -install_name `pwd`/\$@ -Xlinker -headerpad_max_install_names"
|
||||
+ shrpldflags="$shrpldflags -install_name `pwd`/libperl.${revision}.${patchlevel}.dylib -Xlinker -headerpad_max_install_names"
|
||||
exeldflags="-Xlinker -headerpad_max_install_names"
|
||||
;;
|
||||
*)
|
||||
- shrpldflags="$shrpldflags -install_name \$(shrpdir)/\$@"
|
||||
+ shrpldflags="$shrpldflags -install_name \$(shrpdir)/libperl.${revision}.${patchlevel}.dylib"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
cygwin*)
|
||||
shrpldflags="$shrpldflags -Wl,--out-implib=libperl.dll.a -Wl,--image-base,0x52000000"
|
||||
@@ -76,13 +76,15 @@ true)
|
||||
;;
|
||||
sunos*)
|
||||
|
@ -1,184 +0,0 @@
|
||||
From a824afe95b6272148dce1f8bf4bcd20a667412e6 Mon Sep 17 00:00:00 2001
|
||||
From: Karl Williamson <khw@cpan.org>
|
||||
Date: Sun, 30 Sep 2018 10:38:02 -0600
|
||||
Subject: [PATCH] PATCH: [perl #133547]: script run broken
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
All scripts can have the ASCII digits for their numbers. Scripts with
|
||||
their own digits can alternatively use those. Only one of these two
|
||||
sets can be used in a script run. The decision as to which set to use
|
||||
must be deferred until the first digit is encountered, as otherwise we
|
||||
don't know which set will be used. Prior to this commit, the decision
|
||||
was being made prematurely in some cases. As a result of this change,
|
||||
the non-ASCII-digits in the Common script need to be special-cased, and
|
||||
different criteria are used to decide if we need to look up whether a
|
||||
character is a digit or not.
|
||||
|
||||
Petr Písař: Ported to 5.28.1 from
|
||||
393e5a4585b92e635cfc4eee34da8f86f3bfd2af.
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
regexec.c | 111 +++++++++++++++++++++++-----------------------
|
||||
t/re/script_run.t | 5 +++
|
||||
2 files changed, 61 insertions(+), 55 deletions(-)
|
||||
|
||||
diff --git a/regexec.c b/regexec.c
|
||||
index 899d979..201d9aa 100644
|
||||
--- a/regexec.c
|
||||
+++ b/regexec.c
|
||||
@@ -10323,6 +10323,10 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
|
||||
|
||||
/* Look at each character in the sequence */
|
||||
while (s < send) {
|
||||
+ /* If the current character being examined is a digit, this is the code
|
||||
+ * point of the zero for its sequence of 10 */
|
||||
+ UV zero_of_char;
|
||||
+
|
||||
UV cp;
|
||||
|
||||
/* The code allows all scripts to use the ASCII digits. This is
|
||||
@@ -10434,16 +10438,6 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
|
||||
script_of_run = script_of_char;
|
||||
}
|
||||
|
||||
- /* All decimal digits must be from the same sequence of 10. Above, we
|
||||
- * handled any ASCII digits without descending to here. We also
|
||||
- * handled the case where we already knew what digit sequence is the
|
||||
- * one to use, and the character is in that sequence. Now that we know
|
||||
- * the script, we can use script_zeros[] to directly find which
|
||||
- * sequence the script uses, except in a few cases it returns 0 */
|
||||
- if (UNLIKELY(zero_of_run == 0) && script_of_char >= 0) {
|
||||
- zero_of_run = script_zeros[script_of_char];
|
||||
- }
|
||||
-
|
||||
/* Now we can see if the script of the character is the same as that of
|
||||
* the run */
|
||||
if (LIKELY(script_of_char == script_of_run)) {
|
||||
@@ -10601,55 +10595,62 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
|
||||
/* Here, the script of the character is compatible with that of the
|
||||
* run. That means that in most cases, it continues the script run.
|
||||
* Either it and the run match exactly, or one or both can be in any of
|
||||
- * several scripts, and the intersection is not empty. But if the
|
||||
- * character is a decimal digit, we need further handling. If we
|
||||
- * haven't seen a digit before, it would establish what set of 10 all
|
||||
- * must come from; and if we have established a set, we need to check
|
||||
- * that this is in it.
|
||||
- *
|
||||
- * But there are cases we can rule out without having to look up if
|
||||
- * this is a digit:
|
||||
- * a. All instances of [0-9] have been dealt with earlier.
|
||||
- * b. The next digit encoded by Unicode is 1600 code points further
|
||||
- * on, so if the code point in this loop iteration is less than
|
||||
- * that, it isn't a digit.
|
||||
- * c. Most scripts that have digits have a single set of 10. If
|
||||
- * we've encountered a digit in such a script, 'zero_of_run' is
|
||||
- * set to the code point (call it z) whose numeric value is 0.
|
||||
- * If the code point in this loop iteration is in the range
|
||||
- * z..z+9, it is in the script's set of 10, and we've actually
|
||||
- * handled it earlier in this function and won't reach this
|
||||
- * point. But, code points in that script that aren't in that
|
||||
- * range can't be digits, so we don't have to look any such up.
|
||||
- * We can tell if this script is such a one by looking at
|
||||
- * 'script_zeros[]' for it. It is non-zero iff it has a single
|
||||
- * set of digits. This rule doesn't apply if we haven't narrowed
|
||||
- * down the possible scripts to a single one yet. Nor if the
|
||||
- * zero of the run is '0', as that also hasn't narrowed things
|
||||
- * down completely */
|
||||
- if ( cp >= FIRST_NON_ASCII_DECIMAL_DIGIT
|
||||
- && ( intersection
|
||||
- || script_of_char < 0 /* Also implies an intersection */
|
||||
- || zero_of_run == '0'
|
||||
- || script_zeros[script_of_char] == 0))
|
||||
+ * several scripts, and the intersection is not empty. However, if the
|
||||
+ * character is a decimal digit, it could still mean failure if it is
|
||||
+ * from the wrong sequence of 10. So, we need to look at if it's a
|
||||
+ * digit. We've already handled the 10 decimal digits, and the next
|
||||
+ * lowest one is this one: */
|
||||
+ if (cp < FIRST_NON_ASCII_DECIMAL_DIGIT) {
|
||||
+ continue; /* Not a digit; this character is part of the run */
|
||||
+ }
|
||||
+
|
||||
+ /* If we have a definitive '0' for the script of this character, we
|
||||
+ * know that for this to be a digit, it must be in the range of +0..+9
|
||||
+ * of that zero. */
|
||||
+ if ( script_of_char >= 0
|
||||
+ && (zero_of_char = script_zeros[script_of_char]))
|
||||
{
|
||||
- SSize_t zero_of_char_index;
|
||||
- zero_of_char_index = _invlist_search(decimals_invlist, cp);
|
||||
- if ( LIKELY(zero_of_char_index >= 0)
|
||||
- && ELEMENT_RANGE_MATCHES_INVLIST(zero_of_char_index))
|
||||
+ if ( cp < zero_of_char
|
||||
+ || cp > zero_of_char + 9)
|
||||
{
|
||||
- UV zero_of_char = decimals_array[zero_of_char_index];
|
||||
- if (zero_of_run) {
|
||||
- if (zero_of_run != zero_of_char) {
|
||||
- retval = FALSE;
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
- else {
|
||||
- zero_of_run = zero_of_char;
|
||||
- }
|
||||
+ continue; /* Not a digit; this character is part of the run
|
||||
+ */
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
+ else { /* Need to look up if this character is a digit or not */
|
||||
+ SSize_t index_of_zero_of_char;
|
||||
+ index_of_zero_of_char = _invlist_search(decimals_invlist, cp);
|
||||
+ if ( UNLIKELY(index_of_zero_of_char < 0)
|
||||
+ || ! ELEMENT_RANGE_MATCHES_INVLIST(index_of_zero_of_char))
|
||||
+ {
|
||||
+ continue; /* Not a digit; this character is part of the run.
|
||||
+ */
|
||||
+ }
|
||||
+
|
||||
+ zero_of_char = decimals_array[index_of_zero_of_char];
|
||||
+ }
|
||||
+
|
||||
+ /* Here, the character is a decimal digit, and the zero of its sequence
|
||||
+ * of 10 is in 'zero_of_char'. If we already have a zero for this run,
|
||||
+ * they better be the same. */
|
||||
+ if (zero_of_run) {
|
||||
+ if (zero_of_run != zero_of_char) {
|
||||
+ retval = FALSE;
|
||||
+ break;
|
||||
}
|
||||
}
|
||||
+ else if (script_of_char == SCX_Common && script_of_run != SCX_Common) {
|
||||
+
|
||||
+ /* Here, the script run isn't Common, but the current digit is in
|
||||
+ * Common, and isn't '0'-'9' (those were handled earlier). Only
|
||||
+ * '0'-'9' are acceptable in non-Common scripts. */
|
||||
+ retval = FALSE;
|
||||
+ break;
|
||||
+ }
|
||||
+ else { /* Otherwise we now have a zero for this run */
|
||||
+ zero_of_run = zero_of_char;
|
||||
+ }
|
||||
} /* end of looping through CLOSESR text */
|
||||
|
||||
Safefree(intersection);
|
||||
diff --git a/t/re/script_run.t b/t/re/script_run.t
|
||||
index 10c7103..f8809e3 100644
|
||||
--- a/t/re/script_run.t
|
||||
+++ b/t/re/script_run.t
|
||||
@@ -97,4 +97,9 @@ foreach my $type ('script_run', 'sr', 'atomic_script_run', 'asr') {
|
||||
like("abc", qr/(*asr:a[bc]*c)/, "Outer asr works on a run");
|
||||
unlike("abc", qr/(*asr:a(*asr:[bc]*)c)/, "Nested asr works to exclude some things");
|
||||
|
||||
+ like("\x{0980}12\x{0993}", qr/^(*sr:.{4})/,
|
||||
+ "Script with own zero works with ASCII digits"); # perl #133547
|
||||
+ like("\x{3041}12\x{3041}", qr/^(*sr:.{4})/,
|
||||
+ "Script without own zero works with ASCII digits");
|
||||
+
|
||||
done_testing();
|
||||
--
|
||||
2.17.2
|
||||
|
@ -22,9 +22,9 @@ diff --git a/t/lib/croak/toke b/t/lib/croak/toke
|
||||
index 1d45a3f..5ec90b9 100644
|
||||
--- a/t/lib/croak/toke
|
||||
+++ b/t/lib/croak/toke
|
||||
@@ -480,3 +480,9 @@ Bareword found where operator expected at - line 2, near "2p0"
|
||||
(Missing operator before p0?)
|
||||
syntax error at - line 2, near "2p0"
|
||||
@@ -489,3 +489,9 @@ =cut
|
||||
EXPECT
|
||||
syntax error at - line 4, next token ???
|
||||
Execution of - aborted due to compilation errors.
|
||||
+########
|
||||
+# NAME check Prototype not terminated includes line number (133524)
|
||||
|
@ -1,54 +0,0 @@
|
||||
From 152f5a590ad349922cc90e3e867a599eced7fada Mon Sep 17 00:00:00 2001
|
||||
From: Karl Williamson <khw@cpan.org>
|
||||
Date: Sun, 30 Sep 2018 10:33:22 -0600
|
||||
Subject: [PATCH] regexec.c: Rename variable
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The new name is clearer as to its meaning, more so after the next
|
||||
commit.
|
||||
|
||||
Petr Písař: Ported to 5.28.1 from
|
||||
81ec018c6daca2b4c8c87eb335a371b4c90753f3.
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
regexec.c | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/regexec.c b/regexec.c
|
||||
index d1a3937..899d979 100644
|
||||
--- a/regexec.c
|
||||
+++ b/regexec.c
|
||||
@@ -10633,20 +10633,20 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
|
||||
|| zero_of_run == '0'
|
||||
|| script_zeros[script_of_char] == 0))
|
||||
{
|
||||
- SSize_t range_zero_index;
|
||||
- range_zero_index = _invlist_search(decimals_invlist, cp);
|
||||
- if ( LIKELY(range_zero_index >= 0)
|
||||
- && ELEMENT_RANGE_MATCHES_INVLIST(range_zero_index))
|
||||
+ SSize_t zero_of_char_index;
|
||||
+ zero_of_char_index = _invlist_search(decimals_invlist, cp);
|
||||
+ if ( LIKELY(zero_of_char_index >= 0)
|
||||
+ && ELEMENT_RANGE_MATCHES_INVLIST(zero_of_char_index))
|
||||
{
|
||||
- UV range_zero = decimals_array[range_zero_index];
|
||||
+ UV zero_of_char = decimals_array[zero_of_char_index];
|
||||
if (zero_of_run) {
|
||||
- if (zero_of_run != range_zero) {
|
||||
+ if (zero_of_run != zero_of_char) {
|
||||
retval = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
- zero_of_run = range_zero;
|
||||
+ zero_of_run = zero_of_char;
|
||||
}
|
||||
}
|
||||
}
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,61 +0,0 @@
|
||||
From 12cad9bd99725bba72029e2651b2b7f0cab2e0b0 Mon Sep 17 00:00:00 2001
|
||||
From: Tony Cook <tony@develop-help.com>
|
||||
Date: Mon, 20 Aug 2018 16:31:45 +1000
|
||||
Subject: [PATCH] (perl #132655) nul terminate result of unpack "u" of invalid
|
||||
data
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
In the given test case, Perl_atof2() would run off the end of the PV,
|
||||
producing an error from ASAN.
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
pp_pack.c | 5 ++++-
|
||||
t/op/pack.t | 9 ++++++++-
|
||||
2 files changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pp_pack.c b/pp_pack.c
|
||||
index 5e9cc64301..f8be9d48ae 100644
|
||||
--- a/pp_pack.c
|
||||
+++ b/pp_pack.c
|
||||
@@ -1727,7 +1727,10 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
|
||||
if (!checksum) {
|
||||
const STRLEN l = (STRLEN) (strend - s) * 3 / 4;
|
||||
sv = sv_2mortal(newSV(l));
|
||||
- if (l) SvPOK_on(sv);
|
||||
+ if (l) {
|
||||
+ SvPOK_on(sv);
|
||||
+ *SvEND(sv) = '\0';
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Note that all legal uuencoded strings are ASCII printables, so
|
||||
diff --git a/t/op/pack.t b/t/op/pack.t
|
||||
index cf0e286509..bb9f865091 100644
|
||||
--- a/t/op/pack.t
|
||||
+++ b/t/op/pack.t
|
||||
@@ -12,7 +12,7 @@ my $no_endianness = $] > 5.009 ? '' :
|
||||
my $no_signedness = $] > 5.009 ? '' :
|
||||
"Signed/unsigned pack modifiers not available on this perl";
|
||||
|
||||
-plan tests => 14717;
|
||||
+plan tests => 14718;
|
||||
|
||||
use strict;
|
||||
use warnings qw(FATAL all);
|
||||
@@ -2081,3 +2081,10 @@ SKIP:
|
||||
fresh_perl_like('pack "c10f1073741824"', qr/Out of memory during pack/, { stderr => 1 },
|
||||
"integer overflow calculating allocation (multiply)");
|
||||
}
|
||||
+
|
||||
+{
|
||||
+ # [perl #132655] heap-buffer-overflow READ of size 11
|
||||
+ # only expect failure under ASAN (and maybe valgrind)
|
||||
+ fresh_perl_is('0.0 + unpack("u", "ab")', "", { stderr => 1 },
|
||||
+ "ensure unpack u of invalid data nul terminates result");
|
||||
+}
|
||||
--
|
||||
2.17.1
|
||||
|
@ -1,77 +0,0 @@
|
||||
From 03b94aa47e981af3c7b0118bfb11facda2b95251 Mon Sep 17 00:00:00 2001
|
||||
From: Aaron Crane <arc@cpan.org>
|
||||
Date: Tue, 9 Oct 2018 14:41:10 +0100
|
||||
Subject: [PATCH] RT#133573: $^X fallback when platform-specific technique
|
||||
fails
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
caretx.c | 28 ++++++++++++++++------------
|
||||
1 file changed, 16 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/caretx.c b/caretx.c
|
||||
index d758f730de..247708de8c 100644
|
||||
--- a/caretx.c
|
||||
+++ b/caretx.c
|
||||
@@ -56,7 +56,19 @@ Perl_set_caret_X(pTHX) {
|
||||
SV *const caret_x = GvSV(tmpgv);
|
||||
#if defined(OS2)
|
||||
sv_setpv(caret_x, os2_execname(aTHX));
|
||||
-#elif defined(USE_KERN_PROC_PATHNAME)
|
||||
+ return;
|
||||
+#elif defined(WIN32)
|
||||
+ char *ansi;
|
||||
+ WCHAR widename[MAX_PATH];
|
||||
+ GetModuleFileNameW(NULL, widename, sizeof(widename)/sizeof(WCHAR));
|
||||
+ ansi = win32_ansipath(widename);
|
||||
+ sv_setpv(caret_x, ansi);
|
||||
+ win32_free(ansi);
|
||||
+ return;
|
||||
+#else
|
||||
+ /* We can try a platform-specific one if possible; if it fails, or we
|
||||
+ * aren't running on a suitable platform, we'll fall back to argv[0]. */
|
||||
+# ifdef USE_KERN_PROC_PATHNAME
|
||||
size_t size = 0;
|
||||
int mib[4];
|
||||
mib[0] = CTL_KERN;
|
||||
@@ -76,7 +88,7 @@ Perl_set_caret_X(pTHX) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
-#elif defined(USE_NSGETEXECUTABLEPATH)
|
||||
+# elif defined(USE_NSGETEXECUTABLEPATH)
|
||||
char buf[1];
|
||||
uint32_t size = sizeof(buf);
|
||||
|
||||
@@ -95,7 +107,7 @@ Perl_set_caret_X(pTHX) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
-#elif defined(HAS_PROCSELFEXE)
|
||||
+# elif defined(HAS_PROCSELFEXE)
|
||||
char buf[MAXPATHLEN];
|
||||
SSize_t len = readlink(PROCSELFEXE_PATH, buf, sizeof(buf) - 1);
|
||||
/* NOTE: if the length returned by readlink() is sizeof(buf) - 1,
|
||||
@@ -125,15 +137,7 @@ Perl_set_caret_X(pTHX) {
|
||||
sv_setpvn(caret_x, buf, len);
|
||||
return;
|
||||
}
|
||||
-#elif defined(WIN32)
|
||||
- char *ansi;
|
||||
- WCHAR widename[MAX_PATH];
|
||||
- GetModuleFileNameW(NULL, widename, sizeof(widename)/sizeof(WCHAR));
|
||||
- ansi = win32_ansipath(widename);
|
||||
- sv_setpv(caret_x, ansi);
|
||||
- win32_free(ansi);
|
||||
- return;
|
||||
-#else
|
||||
+# endif
|
||||
/* Fallback to this: */
|
||||
sv_setpv(caret_x, PL_origargv[0]);
|
||||
#endif
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,35 +0,0 @@
|
||||
From 30c869b87739b56280daca3cd44b0588144747b7 Mon Sep 17 00:00:00 2001
|
||||
From: Leon Timmermans <fawaka@gmail.com>
|
||||
Date: Sun, 16 Dec 2018 01:05:06 +0100
|
||||
Subject: [PATCH] Always mark pipe in list pipe-open as inherit-on-exec
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This is the my_popen_list counterpart of
|
||||
c6fe5b981b942ddabb23ed4b7602067e906e6d88
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
util.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/util.c b/util.c
|
||||
index 99bf4ae2b0..8c9909e10c 100644
|
||||
--- a/util.c
|
||||
+++ b/util.c
|
||||
@@ -2330,8 +2330,10 @@ Perl_my_popen_list(pTHX_ const char *mode, int n, SV **args)
|
||||
if (p[THAT] != (*mode == 'r')) /* if dup2() didn't close it */
|
||||
PerlLIO_close(p[THAT]); /* close parent's end of _the_ pipe */
|
||||
}
|
||||
- else
|
||||
+ else {
|
||||
+ setfd_cloexec_or_inhexec_by_sysfdness(p[THIS]);
|
||||
PerlLIO_close(p[THAT]); /* close parent's end of _the_ pipe */
|
||||
+ }
|
||||
#if !defined(HAS_FCNTL) || !defined(F_SETFD)
|
||||
/* No automatic close - do it by hand */
|
||||
# ifndef NOFILE
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,43 +0,0 @@
|
||||
From c6fe5b981b942ddabb23ed4b7602067e906e6d88 Mon Sep 17 00:00:00 2001
|
||||
From: Leon Timmermans <fawaka@gmail.com>
|
||||
Date: Sat, 15 Dec 2018 19:08:41 +0100
|
||||
Subject: [PATCH] Always mark pipe in pipe-open as inherit-on-exec
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Since 2cdf406a a lot of file descriptors are opened close-on-exec,
|
||||
including the pipe that is passed to the child process in a pipe-open.
|
||||
This is usually fine because a dup2 follows to rename that handle to
|
||||
stdin/stdout that will set the inherit-on-exec. However, if the pipe
|
||||
descriptor already has the right value, for example because stdin was
|
||||
closed, then no dup2 happens and hence it's still marked as
|
||||
close-on-exec right when we want to perform an exec.
|
||||
|
||||
This patch explicitly marks such a handle as inherit-on-exec, to ensure
|
||||
it will be open for the child process.
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
util.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/util.c b/util.c
|
||||
index a9bf9b8609..99bf4ae2b0 100644
|
||||
--- a/util.c
|
||||
+++ b/util.c
|
||||
@@ -2469,8 +2469,10 @@ Perl_my_popen(pTHX_ const char *cmd, const char *mode)
|
||||
if (p[THAT] != (*mode == 'r')) /* if dup2() didn't close it */
|
||||
PerlLIO_close(p[THAT]);
|
||||
}
|
||||
- else
|
||||
+ else {
|
||||
+ setfd_cloexec_or_inhexec_by_sysfdness(p[THIS]);
|
||||
PerlLIO_close(p[THAT]);
|
||||
+ }
|
||||
#ifndef OS2
|
||||
if (doexec) {
|
||||
#if !defined(HAS_FCNTL) || !defined(F_SETFD)
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,135 +0,0 @@
|
||||
From 85d2f7cacba4b0088ae0c67cc6d4c9b7495355c0 Mon Sep 17 00:00:00 2001
|
||||
From: Tony Cook <tony@develop-help.com>
|
||||
Date: Wed, 21 Nov 2018 10:05:27 +1100
|
||||
Subject: [PATCH 3/3] (perl #133659) make an in-place edit successful if the
|
||||
exit status is zero
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
during global destruction.
|
||||
|
||||
This means that code like:
|
||||
|
||||
perl -i -ne '...; last'
|
||||
|
||||
will replace the input file with the in-place edit output of the file,
|
||||
but:
|
||||
|
||||
perl -i -ne '...; die'
|
||||
|
||||
or
|
||||
|
||||
perl -i -ne '...; exit 1'
|
||||
|
||||
won't.
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
doio.c | 45 +++++++++++++++++++++++++--------------------
|
||||
t/io/inplace.t | 2 +-
|
||||
t/run/switches.t | 4 ++--
|
||||
3 files changed, 28 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/doio.c b/doio.c
|
||||
index 77421de1d1..9fe222e082 100644
|
||||
--- a/doio.c
|
||||
+++ b/doio.c
|
||||
@@ -1173,34 +1173,39 @@ S_argvout_free(pTHX_ SV *io, MAGIC *mg) {
|
||||
dir = INT2PTR(DIR *, SvIV(*dir_psv));
|
||||
#endif
|
||||
if (IoIFP(io)) {
|
||||
- SV **pid_psv;
|
||||
- PerlIO *iop = IoIFP(io);
|
||||
+ if (PL_phase == PERL_PHASE_DESTRUCT && PL_statusvalue == 0) {
|
||||
+ (void)argvout_final(mg, (IO*)io, FALSE);
|
||||
+ }
|
||||
+ else {
|
||||
+ SV **pid_psv;
|
||||
+ PerlIO *iop = IoIFP(io);
|
||||
|
||||
- assert(SvTYPE(mg->mg_obj) == SVt_PVAV);
|
||||
+ assert(SvTYPE(mg->mg_obj) == SVt_PVAV);
|
||||
|
||||
- pid_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_ORIG_PID, FALSE);
|
||||
+ pid_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_ORIG_PID, FALSE);
|
||||
|
||||
- assert(pid_psv && *pid_psv);
|
||||
+ assert(pid_psv && *pid_psv);
|
||||
|
||||
- if (SvIV(*pid_psv) == (IV)PerlProc_getpid()) {
|
||||
- /* if we get here the file hasn't been closed explicitly by the
|
||||
- user and hadn't been closed implicitly by nextargv(), so
|
||||
- abandon the edit */
|
||||
- SV **temp_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_TEMP_NAME, FALSE);
|
||||
- const char *temp_pv = SvPVX(*temp_psv);
|
||||
+ if (SvIV(*pid_psv) == (IV)PerlProc_getpid()) {
|
||||
+ /* if we get here the file hasn't been closed explicitly by the
|
||||
+ user and hadn't been closed implicitly by nextargv(), so
|
||||
+ abandon the edit */
|
||||
+ SV **temp_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_TEMP_NAME, FALSE);
|
||||
+ const char *temp_pv = SvPVX(*temp_psv);
|
||||
|
||||
- assert(temp_psv && *temp_psv && SvPOK(*temp_psv));
|
||||
- (void)PerlIO_close(iop);
|
||||
- IoIFP(io) = IoOFP(io) = NULL;
|
||||
+ assert(temp_psv && *temp_psv && SvPOK(*temp_psv));
|
||||
+ (void)PerlIO_close(iop);
|
||||
+ IoIFP(io) = IoOFP(io) = NULL;
|
||||
#ifdef ARGV_USE_ATFUNCTIONS
|
||||
- if (dir) {
|
||||
- if (unlinkat(my_dirfd(dir), temp_pv, 0) < 0 &&
|
||||
- NotSupported(errno))
|
||||
- (void)UNLINK(temp_pv);
|
||||
- }
|
||||
+ if (dir) {
|
||||
+ if (unlinkat(my_dirfd(dir), temp_pv, 0) < 0 &&
|
||||
+ NotSupported(errno))
|
||||
+ (void)UNLINK(temp_pv);
|
||||
+ }
|
||||
#else
|
||||
- (void)UNLINK(temp_pv);
|
||||
+ (void)UNLINK(temp_pv);
|
||||
#endif
|
||||
+ }
|
||||
}
|
||||
}
|
||||
#ifdef ARGV_USE_ATFUNCTIONS
|
||||
diff --git a/t/io/inplace.t b/t/io/inplace.t
|
||||
index ac50f1ab77..0403cd9250 100644
|
||||
--- a/t/io/inplace.t
|
||||
+++ b/t/io/inplace.t
|
||||
@@ -96,7 +96,7 @@ SKIP:
|
||||
my @tests =
|
||||
( # opts, code, result, name, $TODO
|
||||
[ "-n", "die", "bar\n", "die shouldn't touch file" ],
|
||||
- [ "-n", "last", "", "last should update file", "not implemented yet" ],
|
||||
+ [ "-n", "last", "", "last should update file" ],
|
||||
);
|
||||
our $file = tempfile() ;
|
||||
|
||||
diff --git a/t/run/switches.t b/t/run/switches.t
|
||||
index 7ccef1e063..594cad6e7f 100644
|
||||
--- a/t/run/switches.t
|
||||
+++ b/t/run/switches.t
|
||||
@@ -429,7 +429,7 @@ __EOF__
|
||||
|
||||
# exit or die should leave original content in file
|
||||
for my $inplace (qw/-i -i.bak/) {
|
||||
- for my $prog (qw/die exit/) {
|
||||
+ for my $prog ("die", "exit 1") {
|
||||
open my $fh, ">", $work or die "$0: failed to open '$work': $!";
|
||||
print $fh $yada;
|
||||
close $fh or die "Failed to close: $!";
|
||||
@@ -443,7 +443,7 @@ __EOF__
|
||||
my $data = do { local $/; <$in> };
|
||||
close $in;
|
||||
is ($data, $yada, "check original content still in file");
|
||||
- unlink $work;
|
||||
+ unlink $work, "$work.bak";
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,139 +0,0 @@
|
||||
From 404395d24bc87890c7d978622296b9925a347aa0 Mon Sep 17 00:00:00 2001
|
||||
From: Tony Cook <tony@develop-help.com>
|
||||
Date: Tue, 20 Nov 2018 15:30:20 +1100
|
||||
Subject: [PATCH 1/3] (perl #133659) move argvout cleanup to a new function
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
doio.c | 62 ++++++++++++++++++++++++++++++++++---------------------
|
||||
embed.fnc | 1 +
|
||||
embed.h | 1 +
|
||||
proto.h | 3 +++
|
||||
4 files changed, 43 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/doio.c b/doio.c
|
||||
index 8d9131cc85..77421de1d1 100644
|
||||
--- a/doio.c
|
||||
+++ b/doio.c
|
||||
@@ -1526,31 +1526,14 @@ S_dir_unchanged(pTHX_ const char *orig_pv, MAGIC *mg) {
|
||||
#define dir_unchanged(orig_psv, mg) \
|
||||
S_dir_unchanged(aTHX_ (orig_psv), (mg))
|
||||
|
||||
-/* explicit renamed to avoid C++ conflict -- kja */
|
||||
-bool
|
||||
-Perl_do_close(pTHX_ GV *gv, bool not_implicit)
|
||||
-{
|
||||
+STATIC bool
|
||||
+S_argvout_final(pTHX_ MAGIC *mg, IO *io, bool not_implicit) {
|
||||
bool retval;
|
||||
- IO *io;
|
||||
- MAGIC *mg;
|
||||
|
||||
- if (!gv)
|
||||
- gv = PL_argvgv;
|
||||
- if (!gv || !isGV_with_GP(gv)) {
|
||||
- if (not_implicit)
|
||||
- SETERRNO(EBADF,SS_IVCHAN);
|
||||
- return FALSE;
|
||||
- }
|
||||
- io = GvIO(gv);
|
||||
- if (!io) { /* never opened */
|
||||
- if (not_implicit) {
|
||||
- report_evil_fh(gv);
|
||||
- SETERRNO(EBADF,SS_IVCHAN);
|
||||
- }
|
||||
- return FALSE;
|
||||
- }
|
||||
- if ((mg = mg_findext((SV*)io, PERL_MAGIC_uvar, &argvout_vtbl))
|
||||
- && mg->mg_obj) {
|
||||
+ /* ensure args are checked before we start using them */
|
||||
+ PERL_ARGS_ASSERT_ARGVOUT_FINAL;
|
||||
+
|
||||
+ {
|
||||
/* handle to an in-place edit work file */
|
||||
SV **back_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_BACKUP_NAME, FALSE);
|
||||
SV **temp_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_TEMP_NAME, FALSE);
|
||||
@@ -1717,7 +1700,38 @@ Perl_do_close(pTHX_ GV *gv, bool not_implicit)
|
||||
SvPVX(*temp_psv), Strerror(errno));
|
||||
}
|
||||
}
|
||||
- freext:
|
||||
+ freext:
|
||||
+ ;
|
||||
+ }
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+/* explicit renamed to avoid C++ conflict -- kja */
|
||||
+bool
|
||||
+Perl_do_close(pTHX_ GV *gv, bool not_implicit)
|
||||
+{
|
||||
+ bool retval;
|
||||
+ IO *io;
|
||||
+ MAGIC *mg;
|
||||
+
|
||||
+ if (!gv)
|
||||
+ gv = PL_argvgv;
|
||||
+ if (!gv || !isGV_with_GP(gv)) {
|
||||
+ if (not_implicit)
|
||||
+ SETERRNO(EBADF,SS_IVCHAN);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ io = GvIO(gv);
|
||||
+ if (!io) { /* never opened */
|
||||
+ if (not_implicit) {
|
||||
+ report_evil_fh(gv);
|
||||
+ SETERRNO(EBADF,SS_IVCHAN);
|
||||
+ }
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ if ((mg = mg_findext((SV*)io, PERL_MAGIC_uvar, &argvout_vtbl))
|
||||
+ && mg->mg_obj) {
|
||||
+ retval = argvout_final(mg, io, not_implicit);
|
||||
mg_freeext((SV*)io, PERL_MAGIC_uvar, &argvout_vtbl);
|
||||
}
|
||||
else {
|
||||
diff --git a/embed.fnc b/embed.fnc
|
||||
index 2ed2cc32b9..408917e0a7 100644
|
||||
--- a/embed.fnc
|
||||
+++ b/embed.fnc
|
||||
@@ -440,6 +440,7 @@ p |bool|do_exec3 |NN const char *incmd|int fd|int do_report
|
||||
#endif
|
||||
#if defined(PERL_IN_DOIO_C)
|
||||
s |void |exec_failed |NN const char *cmd|int fd|int do_report
|
||||
+s |bool |argvout_final |NN MAGIC *mg|NN IO *io|bool not_implicit
|
||||
#endif
|
||||
#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
|
||||
: Defined in doio.c, used only in pp_sys.c
|
||||
diff --git a/embed.h b/embed.h
|
||||
index 4cc97126bd..ffa5b1d581 100644
|
||||
--- a/embed.h
|
||||
+++ b/embed.h
|
||||
@@ -1755,6 +1755,7 @@
|
||||
#define deb_stack_n(a,b,c,d,e) S_deb_stack_n(aTHX_ a,b,c,d,e)
|
||||
# endif
|
||||
# if defined(PERL_IN_DOIO_C)
|
||||
+#define argvout_final(a,b,c) S_argvout_final(aTHX_ a,b,c)
|
||||
#define exec_failed(a,b,c) S_exec_failed(aTHX_ a,b,c)
|
||||
#define ingroup(a,b) S_ingroup(aTHX_ a,b)
|
||||
#define openn_cleanup(a,b,c,d,e,f,g,h,i,j,k,l,m) S_openn_cleanup(aTHX_ a,b,c,d,e,f,g,h,i,j,k,l,m)
|
||||
diff --git a/proto.h b/proto.h
|
||||
index e57df2f206..061a9d72a0 100644
|
||||
--- a/proto.h
|
||||
+++ b/proto.h
|
||||
@@ -4752,6 +4752,9 @@ STATIC void S_deb_stack_n(pTHX_ SV** stack_base, I32 stack_min, I32 stack_max, I
|
||||
assert(stack_base)
|
||||
#endif
|
||||
#if defined(PERL_IN_DOIO_C)
|
||||
+STATIC bool S_argvout_final(pTHX_ MAGIC *mg, IO *io, bool not_implicit);
|
||||
+#define PERL_ARGS_ASSERT_ARGVOUT_FINAL \
|
||||
+ assert(mg); assert(io)
|
||||
STATIC void S_exec_failed(pTHX_ const char *cmd, int fd, int do_report);
|
||||
#define PERL_ARGS_ASSERT_EXEC_FAILED \
|
||||
assert(cmd)
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,60 +0,0 @@
|
||||
From 640e129d0fc499d24a759cacae9240a32c66fa51 Mon Sep 17 00:00:00 2001
|
||||
From: Tony Cook <tony@develop-help.com>
|
||||
Date: Tue, 20 Nov 2018 16:43:43 +1100
|
||||
Subject: [PATCH 2/3] (perl #133659) tests for global destruction handling of
|
||||
inplace editing
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
t/io/inplace.t | 28 +++++++++++++++++++++++++++-
|
||||
1 file changed, 27 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/t/io/inplace.t b/t/io/inplace.t
|
||||
index 98159e06bf..ac50f1ab77 100644
|
||||
--- a/t/io/inplace.t
|
||||
+++ b/t/io/inplace.t
|
||||
@@ -5,7 +5,7 @@ require './test.pl';
|
||||
|
||||
$^I = $^O eq 'VMS' ? '_bak' : '.bak';
|
||||
|
||||
-plan( tests => 6 );
|
||||
+plan( tests => 8 );
|
||||
|
||||
my @tfiles = (tempfile(), tempfile(), tempfile());
|
||||
my @tfiles_bak = map "$_$^I", @tfiles;
|
||||
@@ -91,3 +91,29 @@ SKIP:
|
||||
|
||||
END { unlink_all(@ifiles); }
|
||||
}
|
||||
+
|
||||
+{
|
||||
+ my @tests =
|
||||
+ ( # opts, code, result, name, $TODO
|
||||
+ [ "-n", "die", "bar\n", "die shouldn't touch file" ],
|
||||
+ [ "-n", "last", "", "last should update file", "not implemented yet" ],
|
||||
+ );
|
||||
+ our $file = tempfile() ;
|
||||
+
|
||||
+ for my $test (@tests) {
|
||||
+ (my ($opts, $code, $result, $name), our $TODO) = @$test;
|
||||
+ open my $fh, ">", $file or die;
|
||||
+ print $fh "bar\n";
|
||||
+ close $fh;
|
||||
+
|
||||
+ runperl( prog => $code,
|
||||
+ switches => [ grep length, "-i", $opts ],
|
||||
+ args => [ $file ],
|
||||
+ stderr => 1, # discarded
|
||||
+ );
|
||||
+ open $fh, "<", $file or die;
|
||||
+ my $data = do { local $/; <$fh>; };
|
||||
+ close $fh;
|
||||
+ is($data, $result, $name);
|
||||
+ }
|
||||
+}
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,62 +0,0 @@
|
||||
From 817480137a8b1165315f21d14b8968862101c3a2 Mon Sep 17 00:00:00 2001
|
||||
From: Tony Cook <tony@develop-help.com>
|
||||
Date: Tue, 28 Aug 2018 14:11:10 +1000
|
||||
Subject: [PATCH] (perl #132158) abort compilation if we see an error compiling
|
||||
a form
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
t/lib/croak/toke | 9 +++++++++
|
||||
toke.c | 9 +++++++++
|
||||
2 files changed, 18 insertions(+)
|
||||
|
||||
diff --git a/t/lib/croak/toke b/t/lib/croak/toke
|
||||
index 59c377ba6b..21851229fe 100644
|
||||
--- a/t/lib/croak/toke
|
||||
+++ b/t/lib/croak/toke
|
||||
@@ -493,3 +493,12 @@ sub t1 {}
|
||||
sub t2 (}
|
||||
EXPECT
|
||||
Prototype not terminated at - line 2.
|
||||
+########
|
||||
+# NAME [perl #132158] format with syntax errors
|
||||
+format=
|
||||
+@
|
||||
+=h
|
||||
+=cut
|
||||
+EXPECT
|
||||
+syntax error at - line 4, next token ???
|
||||
+Execution of - aborted due to compilation errors.
|
||||
diff --git a/toke.c b/toke.c
|
||||
index 844de04a23..666424ba02 100644
|
||||
--- a/toke.c
|
||||
+++ b/toke.c
|
||||
@@ -5099,6 +5099,14 @@ Perl_yylex(pTHX)
|
||||
|
||||
return yylex();
|
||||
case LEX_FORMLINE:
|
||||
+ if (PL_parser->sub_error_count != PL_error_count) {
|
||||
+ /* There was an error parsing a formline, which tends to
|
||||
+ mess up the parser.
|
||||
+ Unlike interpolated sub-parsing, we can't treat any of
|
||||
+ these as recoverable, so no need to check sub_no_recover.
|
||||
+ */
|
||||
+ yyquit();
|
||||
+ }
|
||||
assert(PL_lex_formbrack);
|
||||
s = scan_formline(PL_bufptr);
|
||||
if (!PL_lex_formbrack)
|
||||
@@ -6518,6 +6526,7 @@ Perl_yylex(pTHX)
|
||||
SAVEI32(PL_lex_formbrack);
|
||||
PL_parser->form_lex_state = PL_lex_state;
|
||||
PL_lex_formbrack = PL_lex_brackets + 1;
|
||||
+ PL_parser->sub_error_count = PL_error_count;
|
||||
goto leftbracket;
|
||||
}
|
||||
}
|
||||
--
|
||||
2.17.2
|
||||
|
@ -1,49 +0,0 @@
|
||||
From 515c395bcca24c55c85b5aeea239e5e836c36059 Mon Sep 17 00:00:00 2001
|
||||
From: Tony Cook <tony@develop-help.com>
|
||||
Date: Wed, 23 Aug 2017 14:18:26 +1000
|
||||
Subject: [PATCH] (perl #131562) correct large line numbers copying eval lines
|
||||
on #line
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Previously this used I32 for line numbers, which takes half the range
|
||||
of line_t and folds it into negative numbers, leading to trying to store
|
||||
the lines at negative indexes.
|
||||
|
||||
The while loop was also modified to stop storing if/when the line number
|
||||
no longer fits into cop_line, or no longer fits into SSize_t (as a
|
||||
positive number) since the index parameter to av_store() is a SSize_t.
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
toke.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/toke.c b/toke.c
|
||||
index de4ab2e652..5a3fe78472 100644
|
||||
--- a/toke.c
|
||||
+++ b/toke.c
|
||||
@@ -1829,14 +1829,14 @@ S_incline(pTHX_ const char *s, const char *end)
|
||||
}
|
||||
else if (GvAV(cfgv)) {
|
||||
AV * const av = GvAV(cfgv);
|
||||
- const I32 start = CopLINE(PL_curcop)+1;
|
||||
- I32 items = AvFILLp(av) - start;
|
||||
+ const line_t start = CopLINE(PL_curcop)+1;
|
||||
+ SSize_t items = AvFILLp(av) - start;
|
||||
if (items > 0) {
|
||||
AV * const av2 = GvAVn(gv2);
|
||||
SV **svp = AvARRAY(av) + start;
|
||||
- I32 l = (I32)line_num+1;
|
||||
- while (items--)
|
||||
- av_store(av2, l++, SvREFCNT_inc(*svp++));
|
||||
+ Size_t l = line_num+1;
|
||||
+ while (items-- && l < SSize_t_MAX && l == (line_t)l)
|
||||
+ av_store(av2, (SSize_t)l++, SvREFCNT_inc(*svp++));
|
||||
}
|
||||
}
|
||||
}
|
||||
--
|
||||
2.20.1
|
||||
|
@ -1,133 +0,0 @@
|
||||
From d81b77352f66acde60db1b056b8eb3321b7b55fe Mon Sep 17 00:00:00 2001
|
||||
From: Tony Cook <tony@develop-help.com>
|
||||
Date: Wed, 6 Feb 2019 10:37:58 +1100
|
||||
Subject: [PATCH] (perl #133778) adjust MARK if we extend the stack in
|
||||
pp_repeat
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
for a list repeat in scalar/void context
|
||||
|
||||
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
||||
---
|
||||
pp.c | 3 +-
|
||||
t/op/repeat.t | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 85 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/pp.c b/pp.c
|
||||
index 5965f1adc0..77dddcb8b3 100644
|
||||
--- a/pp.c
|
||||
+++ b/pp.c
|
||||
@@ -1694,7 +1694,8 @@ PP(pp_repeat)
|
||||
else {
|
||||
dTOPss;
|
||||
ASSUME(MARK + 1 == SP);
|
||||
- XPUSHs(sv);
|
||||
+ MEXTEND(SP, 1);
|
||||
+ PUSHs(sv);
|
||||
MARK[1] = &PL_sv_undef;
|
||||
}
|
||||
SP = MARK + 2;
|
||||
diff --git a/t/op/repeat.t b/t/op/repeat.t
|
||||
index 978916689b..fa7ce06904 100644
|
||||
--- a/t/op/repeat.t
|
||||
+++ b/t/op/repeat.t
|
||||
@@ -6,7 +6,7 @@ BEGIN {
|
||||
set_up_inc( '../lib' );
|
||||
}
|
||||
|
||||
-plan(tests => 49);
|
||||
+plan(tests => 50);
|
||||
|
||||
# compile time
|
||||
|
||||
@@ -192,3 +192,85 @@ fresh_perl_like(
|
||||
|
||||
eval q{() = (() or ((0) x 0)); 1};
|
||||
is($@, "", "RT #130247");
|
||||
+
|
||||
+# yes, the newlines matter
|
||||
+fresh_perl_is(<<'PERL', "", { stderr => 1 }, "(perl #133778) MARK mishandling");
|
||||
+map{s[][];eval;0}<DATA>__END__
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+()x0
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+0
|
||||
+PERL
|
||||
--
|
||||
2.20.1
|
||||
|
67
perl.spec
67
perl.spec
@ -1,4 +1,4 @@
|
||||
%global perl_version 5.28.1
|
||||
%global perl_version 5.28.2
|
||||
%global perl_epoch 4
|
||||
%global perl_arch_stem -thread-multi
|
||||
%global perl_archname %{_arch}-%{_os}%{perl_arch_stem}
|
||||
@ -83,7 +83,7 @@ License: GPL+ or Artistic
|
||||
Epoch: %{perl_epoch}
|
||||
Version: %{perl_version}
|
||||
# release number must be even higher, because dual-lived modules will be broken otherwise
|
||||
Release: 435%{?dist}
|
||||
Release: 436%{?dist}
|
||||
Summary: Practical Extraction and Report Language
|
||||
Url: https://www.perl.org/
|
||||
Source0: https://www.cpan.org/src/5.0/perl-%{perl_version}.tar.xz
|
||||
@ -186,17 +186,9 @@ Patch27: perl-5.29.2-multiconcat-mutator-not-seen-in-lex.patch
|
||||
# in upstream after 5.29.2
|
||||
Patch28: perl-5.29.2-perl-132683-don-t-try-to-convert-PL_sv_placeholder-i.patch
|
||||
|
||||
# Fix upack "u" of invalid data, RT#132655, in upstream after 5.29.2
|
||||
Patch29: perl-5.29.2-perl-132655-nul-terminate-result-of-unpack-u-of-inva.patch
|
||||
|
||||
# Pass the correct CFLAGS to dtrace
|
||||
Patch30: perl-5.28.0-Pass-CFLAGS-to-dtrace.patch
|
||||
|
||||
# Fix script run matching to allow ASCII digits in scripts that use their own in
|
||||
# addition, RT#133547, in upstream after 5.29.3
|
||||
Patch31: perl-5.28.1-regexec.c-Rename-variable.patch
|
||||
Patch32: perl-5.28.1-PATCH-perl-133547-script-run-broken.patch
|
||||
|
||||
# Fix PathTools tests to cope with ESTALE error, RT#133534,
|
||||
# in upstream after 5.29.3
|
||||
Patch33: perl-5.29.3-Accept-also-ESTALE-fix-for-RT-133534.patch
|
||||
@ -204,12 +196,6 @@ Patch33: perl-5.29.3-Accept-also-ESTALE-fix-for-RT-133534.patch
|
||||
# Fix an undefined behaviour in S_hv_delete_common(), in upstream after 5.29.5
|
||||
Patch34: perl-5.29.5-S_hv_delete_common-avoid-undefined-behaviour.patch
|
||||
|
||||
# Fix in-place edit to replace files on a successful perl exit status,
|
||||
# bug #1650041, RT#133659, in upstream after 5.29.5
|
||||
Patch35: perl-5.29.5-perl-133659-move-argvout-cleanup-to-a-new-function.patch
|
||||
Patch36: perl-5.29.5-perl-133659-tests-for-global-destruction-handling-of.patch
|
||||
Patch37: perl-5.29.5-perl-133659-make-an-in-place-edit-successful-if-the-.patch
|
||||
|
||||
# Fix compiling regular expressions that contain both compile- and run-time
|
||||
# compiled code blocks, RT#133687, in upstream after 5.29.5
|
||||
Patch38: perl-5.29.5-handle-code-mixed-compile-and-runtime.patch
|
||||
@ -219,11 +205,6 @@ Patch39: perl-5.28.1-ext-GDBM_File-t-fatal.t-handle-non-fatality.patch
|
||||
Patch40: perl-5.29.5-Correct-spelling-error-in-skip-message.patch
|
||||
Patch41: perl-5.29.5-Avoid-Use-of-uninitialized-value-res-in-numeric-eq-w.patch
|
||||
|
||||
# Do not close an IPC pipe that already has a desired descriptor, RT#133726,
|
||||
# in upstream after 5.29.5
|
||||
Patch42: perl-5.29.5-Always-mark-pipe-in-pipe-open-as-inherit-on-exec.patch
|
||||
Patch43: perl-5.29.5-Always-mark-pipe-in-pipe-open-as-inherit-on-exec-2.patch
|
||||
|
||||
# Fix reporting a line number for non-terminated prototypes, RT#133524,
|
||||
# in upstream after 5.29.6
|
||||
Patch44: perl-5.28.1-perl-133524-report-line-number-for-Prototype-not-ter.patch
|
||||
@ -232,9 +213,6 @@ Patch44: perl-5.28.1-perl-133524-report-line-number-for-Prototype-not-ter
|
||||
Patch45: perl-5.29.6-perl-133721-TODO-test-for-eof-with-no-LAST_FH.patch
|
||||
Patch46: perl-5.29.6-First-eof-should-return-true.patch
|
||||
|
||||
# Fix a crash when compiling a malformed form, RT#132158, in upstream after 5.29.6
|
||||
Patch47: perl-5.29.6-perl-132158-abort-compilation-if-we-see-an-error-com.patch
|
||||
|
||||
# Prevent long jumps from clobbering local variables, RT#133575,
|
||||
# in upstream after 5.29.6
|
||||
Patch49: perl-5.29.6-perl-133575-prevent-set-longjmp-clobbering-locals-in.patch
|
||||
@ -243,23 +221,12 @@ Patch49: perl-5.29.6-perl-133575-prevent-set-longjmp-clobbering-locals-in
|
||||
# ligatures, RT#133756, in upstream after 5.29.6
|
||||
Patch50: perl-5.29.6-PATCH-perl-133756-Failure-to-match-properly.patch
|
||||
|
||||
# Fix the interpreter path if procfs is not mounted, RT#133573,
|
||||
# in upstream after 5.29.3
|
||||
Patch51: perl-5.29.3-RT-133573-X-fallback-when-platform-specific-techniqu.patch
|
||||
|
||||
# Fix a crash when parsing #line directives with large numbers in eval, RT#131562,
|
||||
# in upstream after 5.29.7
|
||||
Patch52: perl-5.29.7-perl-131562-correct-large-line-numbers-copying-eval-.patch
|
||||
|
||||
# Fix setting magic when changing $^R, RT#133782, in upstream after 5.29.7
|
||||
Patch53: perl-5.28.1-perl-133782-set-magic-when-changing-R.patch
|
||||
|
||||
# Fix a race when loading XS modules, in upstream after 5.29.7
|
||||
Patch54: perl-5.29.7-Perl_my_cxt_init-fix-potential-race-condition.patch
|
||||
|
||||
# Fix extending a stack in Perl parser, RT#133778, in upstream after 5.29.8
|
||||
Patch55: perl-5.29.8-perl-133778-adjust-MARK-if-we-extend-the-stack-in-pp.patch
|
||||
|
||||
# Fix a leak when compiling a typed hash dereference, in upstream after 5.29.8
|
||||
Patch56: perl-5.28.1-fix-leak-when-compiling-typed-hash-deref.patch
|
||||
Patch57: perl-5.29.8-fix-blead-on-non-threaded-builds.patch
|
||||
@ -362,7 +329,7 @@ BuildRequires: rsyslog
|
||||
|
||||
|
||||
# compat macro needed for rebuild
|
||||
%global perl_compat perl(:MODULE_COMPAT_5.28.1)
|
||||
%global perl_compat perl(:MODULE_COMPAT_5.28.2)
|
||||
|
||||
Requires: %perl_compat
|
||||
Requires: perl-interpreter%{?_isa} = %{perl_epoch}:%{perl_version}-%{release}
|
||||
@ -514,6 +481,7 @@ Summary: The libraries for the perl run-time
|
||||
License: (GPL+ or Artistic) and HSRL and MIT and UCD
|
||||
# Compat provides
|
||||
Provides: %perl_compat
|
||||
Provides: perl(:MODULE_COMPAT_5.28.1)
|
||||
Provides: perl(:MODULE_COMPAT_5.28.0)
|
||||
# Interpreter version to fulfil required genersted from "require 5.006;"
|
||||
Provides: perl(:VERSION) = %{perl_version}
|
||||
@ -2005,7 +1973,7 @@ encoder/decoder. These encoding methods are specified in RFC 2045 - MIME
|
||||
Summary: What modules are shipped with versions of perl
|
||||
License: GPL+ or Artistic
|
||||
Epoch: 1
|
||||
Version: 5.20180622
|
||||
Version: 5.20190419
|
||||
Requires: %perl_compat
|
||||
Requires: perl(List::Util)
|
||||
Requires: perl(version) >= 0.88
|
||||
@ -2023,7 +1991,7 @@ are shipped with each version of perl.
|
||||
Summary: Tool for listing modules shipped with perl
|
||||
License: GPL+ or Artistic
|
||||
Epoch: 1
|
||||
Version: 5.20180622
|
||||
Version: 5.20190419
|
||||
Requires: %perl_compat
|
||||
Requires: perl(feature)
|
||||
Requires: perl(version) >= 0.88
|
||||
@ -2894,32 +2862,20 @@ Perl extension for Version Objects
|
||||
%patch26 -p1
|
||||
%patch27 -p1
|
||||
%patch28 -p1
|
||||
%patch29 -p1
|
||||
%patch30 -p1
|
||||
%patch31 -p1
|
||||
%patch32 -p1
|
||||
%patch33 -p1
|
||||
%patch34 -p1
|
||||
%patch35 -p1
|
||||
%patch36 -p1
|
||||
%patch37 -p1
|
||||
%patch38 -p1
|
||||
%patch39 -p1
|
||||
%patch40 -p1
|
||||
%patch41 -p1
|
||||
%patch42 -p1
|
||||
%patch43 -p1
|
||||
%patch44 -p1
|
||||
%patch45 -p1
|
||||
%patch46 -p1
|
||||
%patch47 -p1
|
||||
%patch49 -p1
|
||||
%patch50 -p1
|
||||
%patch51 -p1
|
||||
%patch52 -p1
|
||||
%patch53 -p1
|
||||
%patch54 -p1
|
||||
%patch55 -p1
|
||||
%patch56 -p1
|
||||
%patch57 -p1
|
||||
%patch58 -p1
|
||||
@ -2966,23 +2922,16 @@ perl -x patchlevel.h \
|
||||
'Fedora Patch27: Fix an assignment to a lexical variable in multiconcatenation expressions (RT#133441)' \
|
||||
'Fedora Patch28: Fix a spurious warning about uninitialized value in warn (RT#132683)' \
|
||||
'Fedora Patch30: Pass the correct CFLAGS to dtrace' \
|
||||
'Fedora Patch31: Fix script run matching to allow ASCII digits in scripts that use their own in addition (RT#133547)' \
|
||||
'Fedora Patch33: Fix PathTools tests to cope with ESTALE error (RT#133534)' \
|
||||
'Fedora Patch34: Fix an undefined behaviour in S_hv_delete_common()' \
|
||||
'Fedora Patch35: Fix in-place edit to replace files on a successful perl exit status (bug #1650041)' \
|
||||
'Fedora Patch38: Fix compiling regular expressions that contain both compile- and run-time compiled code blocks (RT#133687)' \
|
||||
'Fedora Patch39: Adjust tests to gdbm-1.15 (RT#133295)' \
|
||||
'Fedora Patch42: Do not close an IPC pipe that already has a desired descriptor (RT#133726)' \
|
||||
'Fedora Patch44: Fix reporting a line number for non-terminated prototypes (RT#133524)' \
|
||||
'Fedora Patch45: Fix first eof() return value (RT#133721)' \
|
||||
'Fedora Patch47: Fix a crash when compiling a malformed form (RT#132158)' \
|
||||
'Fedora Patch49: Prevent long jumps from clobbering local variables (RT#133575)' \
|
||||
'Fedora Patch50: Fix a mismatch with a case-insesitive regular expression on a text with ligatures (RT#133756)' \
|
||||
'Fedora Patch51: Fix the interpreter path if procfs is not mounted (RT#133573)' \
|
||||
'Fedora Patch52: Fix a crash when parsing #line directives with large numbers in eval (RT#131562)' \
|
||||
'Fedora Patch53: Fix setting magic when changing $^R (RT#133782)' \
|
||||
'Fedora Patch54: Fix a race when loading XS modules' \
|
||||
'Fedora Patch55: Fix extending a stack in Perl parser (RT#133778)' \
|
||||
'Fedora Patch56: Fix a leak when compiling a typed hash dereference' \
|
||||
'Fedora Patch58: Fix a buffer overread when handling a scope error in qr/\(?{/ (RT#133879)' \
|
||||
'Fedora Patch59: Fix a buffer overread when parsing a regular expression with an unknown character name (RT#133880)' \
|
||||
@ -5284,6 +5233,10 @@ popd
|
||||
|
||||
# Old changelog entries are preserved in CVS.
|
||||
%changelog
|
||||
* Tue Apr 23 2019 Jitka Plesnikova <jplesnik@redhat.com> - 4:5.28.2-436
|
||||
- 5.28.2 bump (see <https://metacpan.org/pod/release/SHAY/perl-5.28.2/pod/perldelta.pod>
|
||||
for release notes)
|
||||
|
||||
* Fri Apr 05 2019 Petr Pisar <ppisar@redhat.com> - 4:5.28.1-435
|
||||
- Fix a leak when compiling a typed hash dereference
|
||||
- Fix a buffer overread when handling a scope error in qr/\(?{/ (RT#133879)
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (perl-5.28.1.tar.xz) = 6d18e9684c3a15bea2ccd28f116d1829c3acd5547551ee3539f0060c0d1a75246dfe570dfb9d5f00625a994a0afb0cbd6a5a5f9a407fef75a421e7dbc6491b43
|
||||
SHA512 (perl-5.28.2.tar.xz) = 0f2e4f7cb5d8cf6e00054b3842907e29b6c85902d97fb881d5bea65edbc875fef4e15e064561fac7c8db4939586576dd76a225026c7cca9624261c887b1fdb08
|
||||
|
Loading…
Reference in New Issue
Block a user