App-perlall
view release on metacpan or search on metacpan
lib/Devel/PatchPerl/Plugin/Asan.pm view on Meta::CPAN
- Copy( sun_ad, &addr, sizeof addr, char );
-
if ( addr.sun_family != AF_UNIX ) {
croak("Bad address family for %s, got %d, should be %d",
"Socket::unpack_sockaddr_un",
END
#; )
if ($vers =~ /^5\.6\./) {
$patch =~ s/@@ -565,10 +565,16 @@/@@ -1016,10 +1016,16 @@/;
}
if ($vers =~ /^5\.[89]\./ or $vers =~ /^5\.1[0-2]\./) {
$patch =~ s/@@ -565,10 +565,16 @@/@@ -363,10 +363,16 @@/;
}
if ($vers =~ /^5\.16\./ or $vers =~ /^5\.15\.[5-9]\./) {
$patch =~ s|ext/Socket/Socket.xs|cpan/Socket/Socket.xs|g;
}
_patch($patch);
_add_patchlevel($vers, "RT#111594 Socket::unpack_sockaddr_un heap-buffer-overflow");
}
sub _patch_eval_start_510
{
_patch(<<'END');
--- pp_ctl.c~
+++ pp_ctl.c
@@ -3088,6 +3088,7 @@ Perl_sv_compile_2op_is_broken(pTHX_ SV *sv, OP **startop, const char *code,
CV* runcv = NULL; /* initialise to avoid compiler warnings */
STRLEN len;
bool need_catch;
+ OP* ret;
PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN;
@@ -3182,7 +3183,9 @@ Perl_sv_compile_2op_is_broken(pTHX_ SV *sv, OP **startop, const char *code,
PERL_UNUSED_VAR(newsp);
PERL_UNUSED_VAR(optype);
- return PL_eval_start;
+ ret = PL_eval_start;
+ PL_eval_start = NULL;
+ return ret;
}
@@ -3903,8 +3906,10 @@ PP(pp_require)
encoding = PL_encoding;
PL_encoding = NULL;
- if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq))
+ if (doeval(gimme, NULL, NULL, PL_curcop->cop_seq)) {
op = DOCATCH(PL_eval_start);
+ PL_eval_start = NULL;
+ }
else
op = PL_op->op_next;
@@ -4029,6 +4034,7 @@ PP(pp_entereval)
PUTBACK;
if (doeval(gimme, NULL, runcv, seq)) {
+ OP *ret;
if (was != PL_breakable_sub_gen /* Some subs defined here. */
? (PERLDB_LINE || PERLDB_SAVESRC)
: PERLDB_SAVESRC_NOSUBS) {
@@ -4037,7 +4043,9 @@ PP(pp_entereval)
char *const safestr = savepvn(tmpbuf, len);
SAVEDELETE(PL_defstash, safestr, len);
}
- return DOCATCH(PL_eval_start);
+ ret = DOCATCH(PL_eval_start);
+ PL_eval_start = NULL;
+ return ret;
} else {
/* We have already left the scope set up earlier thanks to the LEAVE
in doeval(). */
END
_add_patchlevel(@_, "RT#115992 PL_eval_start use-after-free");
}
sub _patch_eval_start_58
{
_patch(<<'END');
diff -bu ./pp_ctl.c~ ./pp_ctl.c
--- ./pp_ctl.c~ 2013-03-04 18:45:25.823223519 -0600
+++ ./pp_ctl.c 2013-03-04 18:52:26.691549451 -0600
@@ -2839,7 +2839,7 @@ STATIC OP *
S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
{
dSP;
- OP * const saveop = PL_op;
+ OP * saveop = PL_op;
PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
@@ -2985,7 +2985,9 @@ S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq)
MUTEX_UNLOCK(&PL_eval_mutex);
#endif /* USE_5005THREADS */
- RETURNOP(PL_eval_start);
+ saveop = PL_eval_start;
+ PL_eval_start = NULL;
+ RETURNOP(saveop);
}
STATIC PerlIO *
@@ -3426,7 +3428,12 @@ PP(pp_require)
encoding = PL_encoding;
PL_encoding = Nullsv;
- op = DOCATCH(doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq));
+ if (doeval(gimme, NULL, Nullcv, PL_curcop->cop_seq)) {
+ op = DOCATCH(PL_eval_start);
+ PL_eval_start = NULL;
+ }
+ else
+ op = PL_op->op_next;
( run in 0.561 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )