App-perlall
view release on metacpan or search on metacpan
lib/Devel/PatchPerl/Plugin/Asan.pm view on Meta::CPAN
qr/^5\.14\.[0123]$/, # fixed in 5.14.4
qr/^5\.1[01235]\./, # TODO fixes not backported
qr/^5\.8[23456789]\./, # TODO
],
# d59e31fc729d8a39a774f03bc6bc457029a7aef2 CVE-2013-1667
subs => [ [ \&_patch_hsplit_rehash ] ],
},
{
perl => [
qr/^5\.16\.[012]$/, # fixed in 5.16.3
qr/^5\.14\.[0123]$/, # fixed in 5.14.4
qr/^5\.1[01235]\./, #
],
subs => [ [ \&_patch_regcomp_nothing ] ],
},
#{
# perl => [
# qr/^5\.1[789]/, # RT #118525
# ],
# subs => [ [ \&_patch_cvgv_lexsub ] ],
#},
);
sub _add_patchlevel {
my $vers = shift;
my $line = shift;
my $success;
File::Copy::cp("patchlevel.h", "patchlevel.h.orig");
open my $in, "<", "patchlevel.h.orig" or return;
open my $out, ">", "patchlevel.h" or return;
$line =~ s/"/\"/g;
my $qr = $] > 5.010 ? /^\s+PERL_GIT_UNPUSHED_COMMITS/
: /^\tNULL$/;
while (my $s = <$in>) {
print $out $s;
if ($s =~ $qr) {
$success++;
print $out "\t,\"".$line."\"\n";
}
}
close $in;
close $out;
print STDERR "patched: $line\n";
return $success;
}
sub _patch_listutil_boot
{
# RT#72700 Fix off-by-two on string literal length
_patch(<<'END');
--- cpan/List-Util/ListUtil.xs.orig 2012-11-12 10:41:07.000000000 -0600
+++ cpan/List-Util/ListUtil.xs 2012-11-12 10:47:52.943198199 -0600
@@ -600,7 +600,7 @@
varav = GvAVn(vargv);
#endif
if (SvTYPE(rmcgv) != SVt_PVGV)
- gv_init(rmcgv, lu_stash, "List::Util", 12, TRUE);
+ gv_init(rmcgv, lu_stash, "List::Util", 10, TRUE);
rmcsv = GvSVn(rmcgv);
#ifndef SvWEAKREF
av_push(varav, newSVpv("weaken",6));
END
_add_patchlevel(@_, "RT#72700 List::Util boot Fix off-by-two on string literal length");
}
sub _patch_sdbm
{
# acdbe25bd91bf897e0cf373b9
# RT#111586 sdbm.c off-by-one access to global .dir
_patch(<<'END');
--- ext/SDBM_File/sdbm/sdbm.c.orig 2012-11-12 10:53:26.000000000 -0600
+++ ext/SDBM_File/sdbm/sdbm.c 2012-11-12 10:56:02.790350262 -0600
@@ -78,8 +78,8 @@ sdbm_open(register char *file, register int flags, register int mode)
register char *dirname;
register char *pagname;
size_t filelen;
- const size_t dirfext_len = sizeof(DIRFEXT "");
- const size_t pagfext_len = sizeof(PAGFEXT "");
+ const size_t dirfext_size = sizeof(DIRFEXT "");
+ const size_t pagfext_size = sizeof(PAGFEXT "");
if (file == NULL || !*file)
return errno = EINVAL, (DBM *) NULL;
@@ -88,17 +88,17 @@ sdbm_open(register char *file, register int flags, register int mode)
*/
filelen = strlen(file);
- if ((dirname = (char *) malloc(filelen + dirfext_len + 1
- + filelen + pagfext_len + 1)) == NULL)
+ if ((dirname = (char *) malloc(filelen + dirfext_size
+ + filelen + pagfext_size)) == NULL)
return errno = ENOMEM, (DBM *) NULL;
/*
* build the file names
*/
memcpy(dirname, file, filelen);
- memcpy(dirname + filelen, DIRFEXT, dirfext_len + 1);
- pagname = dirname + filelen + dirfext_len + 1;
+ memcpy(dirname + filelen, DIRFEXT, dirfext_size);
+ pagname = dirname + filelen + dirfext_size;
memcpy(pagname, file, filelen);
- memcpy(pagname + filelen, PAGFEXT, pagfext_len + 1);
+ memcpy(pagname + filelen, PAGFEXT, pagfext_size);
db = sdbm_prep(dirname, pagname, flags, mode);
free((char *) dirname);
END
_add_patchlevel(@_, "RT#111586 sdbm.c off-by-one access to global .dir");
}
sub _patch_to_utf8_case_memcpy
{
_patch(<<'END');
--- utf8.c~
+++ utf8.c
@@ -2366,7 +2366,9 @@ Perl_to_utf8_case(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp,
/* Here, there was no mapping defined, which means that the code point maps
* to itself. Return the inputs */
len = UTF8SKIP(p);
( run in 2.527 seconds using v1.01-cache-2.11-cpan-ceb78f64989 )