svn commit: r414914 - in branches/2016Q2/lang: perl5-devel perl5-devel/files perl5.18 perl5.18/files perl5.20 perl5.20/files perl5.22 perl5.22/files

Jason Unovitch junovitch at FreeBSD.org
Tue May 10 03:10:12 UTC 2016


Author: junovitch
Date: Tue May 10 03:10:09 2016
New Revision: 414914
URL: https://svnweb.freebsd.org/changeset/ports/414914

Log:
  MFH r412502 r412503 r413010 r413019 r413036 r413249 r413567:
  
  Apply batch of Perl updates up to security issue fix.
  
  Fix a Perl security issue.
  
  PR:		208879
  Reported by:	Sevan Janiyan
  Security:	CVE-2016-2381
  Sponsored by:	Absolight
  
  Approved by:	ports-secteam (with hat)

Added:
  branches/2016Q2/lang/perl5.18/files/patch-7098eff
     - copied unchanged from r413567, head/lang/perl5.18/files/patch-7098eff
  branches/2016Q2/lang/perl5.20/files/patch-7098eff
     - copied unchanged from r413567, head/lang/perl5.20/files/patch-7098eff
  branches/2016Q2/lang/perl5.22/files/patch-58eaa11
     - copied unchanged from r413567, head/lang/perl5.22/files/patch-58eaa11
Modified:
  branches/2016Q2/lang/perl5-devel/Makefile
  branches/2016Q2/lang/perl5-devel/distinfo
  branches/2016Q2/lang/perl5-devel/files/patch-perl.c
  branches/2016Q2/lang/perl5-devel/files/patch-t_porting_customized.dat
  branches/2016Q2/lang/perl5-devel/pkg-plist
  branches/2016Q2/lang/perl5-devel/version.mk
  branches/2016Q2/lang/perl5.18/Makefile
  branches/2016Q2/lang/perl5.18/pkg-plist
  branches/2016Q2/lang/perl5.20/Makefile
  branches/2016Q2/lang/perl5.20/pkg-plist
  branches/2016Q2/lang/perl5.22/Makefile
  branches/2016Q2/lang/perl5.22/pkg-plist
Directory Properties:
  branches/2016Q2/   (props changed)

Modified: branches/2016Q2/lang/perl5-devel/Makefile
==============================================================================
--- branches/2016Q2/lang/perl5-devel/Makefile	Tue May 10 03:00:13 2016	(r414913)
+++ branches/2016Q2/lang/perl5-devel/Makefile	Tue May 10 03:10:09 2016	(r414914)
@@ -2,7 +2,7 @@
 # $FreeBSD$
 
 PORTNAME=	perl
-PORTREVISION=	0
+PORTREVISION=	2
 # XXX Remove second line, uncomment first
 #DISTVERSION=	${PERL_VERSION}
 DISTVERSION=	${GH_TAGNAME:C/^v//:C/-g[0-9a-f]*$//}
@@ -23,13 +23,14 @@ LICENSE_FILE_ART10=	${WRKSRC}/Artistic
 LICENSE_FILE_GPLv1=	${WRKSRC}/Copying
 
 TEST_TARGET=	test_harness
-TEST_ENV=	${MAKE_ENV} TEST_JOBS=${MAKE_JOBS_NUMBER}
+TEST_ENV=	${MAKE_ENV} TEST_JOBS=${MAKE_JOBS_NUMBER} \
+		LD_LIBRARY_PATH=${WRKSRC} COMPRESS_ZLIB_RUN_ALL=yes
 
 # XXX Remove github things.
 USE_GITHUB=	yes
 GH_ACCOUNT=	Perl
 GH_PROJECT=	perl5
-GH_TAGNAME=	v5.23.9-30-g4caf7d8
+GH_TAGNAME=	v5.23.9-85-g9b1bcf2
 
 OPTIONS_DEFINE=	DEBUG GDBM PERL_64BITINT PTHREAD \
 		MULTIPLICITY SITECUSTOMIZE
@@ -161,6 +162,7 @@ PLIST_SUB+=	PERL_VERSION=${PERL_VERSION}
 		SITE_PERL=${SITE_PERL_REL} \
 		SITE_ARCH=${SITE_ARCH_REL} \
 		PRIV_LIB=${_PRIV_LIB} \
+		PKGNAMESUFFIX=${PKGNAMESUFFIX} \
 		ARCH_LIB=${_ARCH_LIB}
 PLIST_SUB+=	PORTVERSION=${PORTVERSION} # XXX Remove
 
@@ -271,6 +273,17 @@ post-patch-PTHREAD-off:
 	${REINPLACE_CMD} -e 's|%%PTHREAD_LIBS%%||g;' \
 		${WRKSRC}/hints/freebsd.sh
 
+post-build:
+	@${REINPLACE_CMD} -e '/^lddlflags/s|-L${WRKSRC} ||' \
+		${WRKSRC}/lib/Config_heavy.pl
+.if ${CC} == /nxb-bin/usr/bin/cc
+	@${REINPLACE_CMD} -e 's=/nxb-bin==' \
+		${WRKSRC}/lib/Config.pm ${WRKSRC}/lib/Config_heavy.pl
+# Restore Config.pm's timestamp so that Perl's build system does not think it
+# needs to rebuild everything.
+	@${TOUCH} -r ${WRKSRC}/lib/Config.pm.bak ${WRKSRC}/lib/Config.pm
+.endif
+
 post-install:
 	${MKDIR} ${STAGEDIR}${SITE_MAN1} ${STAGEDIR}${SITE_MAN3}
 	${MKDIR} ${STAGEDIR}${SITE_ARCH}/auto
@@ -295,6 +308,6 @@ post-install:
 			${STRIP_CMD} $$f; \
 			${CHMOD} 444 $$f; \
 		done
-	${INSTALL_DATA} ${WRKDIR}/perl-man.conf ${STAGEDIR}${PREFIX}/etc/man.d/perl${PERL_VER}.conf
+	${INSTALL_DATA} ${WRKDIR}/perl-man.conf ${STAGEDIR}${PREFIX}/etc/man.d/perl${PKGNAMESUFFIX}.conf
 
 .include <bsd.port.mk>

Modified: branches/2016Q2/lang/perl5-devel/distinfo
==============================================================================
--- branches/2016Q2/lang/perl5-devel/distinfo	Tue May 10 03:00:13 2016	(r414913)
+++ branches/2016Q2/lang/perl5-devel/distinfo	Tue May 10 03:10:09 2016	(r414914)
@@ -1,2 +1,2 @@
-SHA256 (perl/perl-5.23.9-30_GH0.tar.gz) = c39da02236981dc5acaea469134836083907e393e836a4640d11b7d15bb048f3
-SIZE (perl/perl-5.23.9-30_GH0.tar.gz) = 17864815
+SHA256 (perl/perl-5.23.9-85_GH0.tar.gz) = d9cf37b24daf8054ee86f6ebcff11197b45b52dcc8281c6521b17eedc686ac1d
+SIZE (perl/perl-5.23.9-85_GH0.tar.gz) = 17879774

Modified: branches/2016Q2/lang/perl5-devel/files/patch-perl.c
==============================================================================
--- branches/2016Q2/lang/perl5-devel/files/patch-perl.c	Tue May 10 03:00:13 2016	(r414913)
+++ branches/2016Q2/lang/perl5-devel/files/patch-perl.c	Tue May 10 03:10:09 2016	(r414914)
@@ -1,6 +1,6 @@
---- perl.c.orig	2016-03-20 17:57:16 UTC
+--- perl.c.orig	2016-04-11 00:49:39 UTC
 +++ perl.c
-@@ -1821,23 +1821,7 @@ S_Internals_V(pTHX_ CV *cv)
+@@ -1825,23 +1825,7 @@ S_Internals_V(pTHX_ CV *cv)
      PUSHs(Perl_newSVpvn_flags(aTHX_ non_bincompat_options,
  			      sizeof(non_bincompat_options) - 1, SVs_TEMP));
  

Modified: branches/2016Q2/lang/perl5-devel/files/patch-t_porting_customized.dat
==============================================================================
--- branches/2016Q2/lang/perl5-devel/files/patch-t_porting_customized.dat	Tue May 10 03:00:13 2016	(r414913)
+++ branches/2016Q2/lang/perl5-devel/files/patch-t_porting_customized.dat	Tue May 10 03:10:09 2016	(r414914)
@@ -1,4 +1,4 @@
---- t/porting/customized.dat.orig	2016-03-14 01:56:49 UTC
+--- t/porting/customized.dat.orig	2016-04-04 04:52:21 UTC
 +++ t/porting/customized.dat
 @@ -14,7 +14,7 @@ ExtUtils::MakeMaker cpan/ExtUtils-MakeMa
  ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm 23a4b33b974e036d59bf55aa02e025506a408048
@@ -9,7 +9,7 @@
  ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm a0ec076bedfa0c2e52fc2b735fbc75b4c2706bbf
  ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm 976b10ec76d1fe6f7ee9000b5596e8950434880b
  ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm bc4b33fa5296ab35bcb1be1c18759b93c4de2598
-@@ -42,7 +42,7 @@ IPC::SysV cpan/IPC-SysV/lib/IPC/SharedMe
+@@ -44,7 +44,7 @@ IPC::SysV cpan/IPC-SysV/lib/IPC/SharedMe
  IPC::SysV cpan/IPC-SysV/lib/IPC/SysV.pm 9a0d1c3dcd67321ef1322f29102a1bc7eb91c61c
  IPC::SysV cpan/IPC-SysV/t/ipcsysv.t ee2c95e846ea201afe13c9ec53b09cef62c8ac68
  Math::BigRat cpan/Math-BigRat/lib/Math/BigRat.pm 6eabc68e04f67694f6fe523e64eb013fc337ca5b

Modified: branches/2016Q2/lang/perl5-devel/pkg-plist
==============================================================================
--- branches/2016Q2/lang/perl5-devel/pkg-plist	Tue May 10 03:00:13 2016	(r414913)
+++ branches/2016Q2/lang/perl5-devel/pkg-plist	Tue May 10 03:10:09 2016	(r414914)
@@ -32,7 +32,7 @@ bin/shasum%%BINSUFFIX%%
 bin/splain%%BINSUFFIX%%
 bin/xsubpp%%BINSUFFIX%%
 bin/zipdetails%%BINSUFFIX%%
-etc/man.d/perl%%PERL_VER%%.conf
+etc/man.d/perl%%PKGNAMESUFFIX%%.conf
 %%PRIV_LIB%%/AnyDBM_File.pm
 %%PRIV_LIB%%/App/Cpan.pm
 %%PRIV_LIB%%/App/Prove.pm
@@ -1448,7 +1448,6 @@ etc/man.d/perl%%PERL_VER%%.conf
 %%PRIV_LIB%%/pod/perl5220delta.pod
 %%PRIV_LIB%%/pod/perl5221delta.pod
 %%PRIV_LIB%%/pod/perl5230delta.pod
-%%PRIV_LIB%%/pod/perl52310delta.pod
 %%PRIV_LIB%%/pod/perl5231delta.pod
 %%PRIV_LIB%%/pod/perl5232delta.pod
 %%PRIV_LIB%%/pod/perl5233delta.pod
@@ -1458,6 +1457,7 @@ etc/man.d/perl%%PERL_VER%%.conf
 %%PRIV_LIB%%/pod/perl5237delta.pod
 %%PRIV_LIB%%/pod/perl5238delta.pod
 %%PRIV_LIB%%/pod/perl5239delta.pod
+%%PRIV_LIB%%/pod/perl5240delta.pod
 %%PRIV_LIB%%/pod/perl561delta.pod
 %%PRIV_LIB%%/pod/perl56delta.pod
 %%PRIV_LIB%%/pod/perl581delta.pod
@@ -2126,7 +2126,6 @@ etc/man.d/perl%%PERL_VER%%.conf
 %%MAN1%%/perl5220delta.1.gz
 %%MAN1%%/perl5221delta.1.gz
 %%MAN1%%/perl5230delta.1.gz
-%%MAN1%%/perl52310delta.1.gz
 %%MAN1%%/perl5231delta.1.gz
 %%MAN1%%/perl5232delta.1.gz
 %%MAN1%%/perl5233delta.1.gz
@@ -2136,6 +2135,7 @@ etc/man.d/perl%%PERL_VER%%.conf
 %%MAN1%%/perl5237delta.1.gz
 %%MAN1%%/perl5238delta.1.gz
 %%MAN1%%/perl5239delta.1.gz
+%%MAN1%%/perl5240delta.1.gz
 %%MAN1%%/perl561delta.1.gz
 %%MAN1%%/perl56delta.1.gz
 %%MAN1%%/perl581delta.1.gz

Modified: branches/2016Q2/lang/perl5-devel/version.mk
==============================================================================
--- branches/2016Q2/lang/perl5-devel/version.mk	Tue May 10 03:00:13 2016	(r414913)
+++ branches/2016Q2/lang/perl5-devel/version.mk	Tue May 10 03:10:09 2016	(r414914)
@@ -1,2 +1,2 @@
-PERL_VERSION=	5.23.10
+PERL_VERSION=	5.24.0
 PERL5_DEPEND=	perl5>=5.23<5.24

Modified: branches/2016Q2/lang/perl5.18/Makefile
==============================================================================
--- branches/2016Q2/lang/perl5.18/Makefile	Tue May 10 03:00:13 2016	(r414913)
+++ branches/2016Q2/lang/perl5.18/Makefile	Tue May 10 03:10:09 2016	(r414914)
@@ -3,7 +3,7 @@
 
 PORTNAME=	perl
 PORTVERSION=	${PERL_VERSION}
-PORTREVISION=	17
+PORTREVISION=	21
 CATEGORIES=	lang devel perl5
 MASTER_SITES=	CPAN/../../src/5.0
 DIST_SUBDIR=	perl
@@ -20,7 +20,8 @@ DEPRECATED=	Unsupported, please upgrade 
 EXPIRATION_DATE=2016-12-31
 
 TEST_TARGET=	test_harness
-TEST_ENV=	${MAKE_ENV} TEST_JOBS=${MAKE_JOBS_NUMBER}
+TEST_ENV=	${MAKE_ENV} TEST_JOBS=${MAKE_JOBS_NUMBER} \
+		LD_LIBRARY_PATH=${WRKSRC} COMPRESS_ZLIB_RUN_ALL=yes
 
 OPTIONS_DEFINE=	DEBUG GDBM PERL_64BITINT PTHREAD \
 		MULTIPLICITY SITECUSTOMIZE USE_PERL
@@ -201,6 +202,7 @@ PLIST_SUB+=	PERL_VERSION=${PERL_VERSION}
 		SITE_PERL=${SITE_PERL_REL} \
 		SITE_ARCH=${SITE_ARCH_REL} \
 		PRIV_LIB=${_PRIV_LIB} \
+		PKGNAMESUFFIX=${PKGNAMESUFFIX} \
 		ARCH_LIB=${_ARCH_LIB}
 
 # Put a symlink to the future libperl.so.x.yy so that -lperl works.
@@ -238,6 +240,17 @@ post-patch-PTHREAD-off:
 		${WRKSRC}/hints/freebsd.sh
 .endif
 
+post-build:
+	@${REINPLACE_CMD} -e '/^lddlflags/s|-L${WRKSRC} ||' \
+		${WRKSRC}/lib/Config_heavy.pl
+.if ${CC} == /nxb-bin/usr/bin/cc
+	@${REINPLACE_CMD} -e 's=/nxb-bin==' \
+		${WRKSRC}/lib/Config.pm ${WRKSRC}/lib/Config_heavy.pl
+# Restore Config.pm's timestamp so that Perl's build system does not think it
+# needs to rebuild everything.
+	@${TOUCH} -r ${WRKSRC}/lib/Config.pm.bak ${WRKSRC}/lib/Config.pm
+.endif
+
 post-install:
 	${MKDIR} ${STAGEDIR}${SITE_MAN1} ${STAGEDIR}${SITE_MAN3}
 	${MKDIR} ${STAGEDIR}${SITE_ARCH}/auto
@@ -261,6 +274,6 @@ post-install:
 			${STRIP_CMD} $$f; \
 			${CHMOD} 444 $$f; \
 		done
-	${INSTALL_DATA} ${WRKDIR}/perl-man.conf ${STAGEDIR}${PREFIX}/etc/man.d/perl${PERL_VER}.conf
+	${INSTALL_DATA} ${WRKDIR}/perl-man.conf ${STAGEDIR}${PREFIX}/etc/man.d/perl${PKGNAMESUFFIX}.conf
 
 .include <bsd.port.mk>

Copied: branches/2016Q2/lang/perl5.18/files/patch-7098eff (from r413567, head/lang/perl5.18/files/patch-7098eff)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2016Q2/lang/perl5.18/files/patch-7098eff	Tue May 10 03:10:09 2016	(r414914, copy of r413567, head/lang/perl5.18/files/patch-7098eff)
@@ -0,0 +1,98 @@
+commit 7098efff946437a2db6013d12c4fc3193fc328ce
+Author: Tony Cook <tony at develop-help.com>
+Date:   2016-01-27 11:52:15 +1100
+
+    remove duplicate environment variables from environ
+    
+    If we see duplicate environment variables while iterating over
+    environ[]:
+    
+    a) make sure we use the same value in %ENV that getenv() returns.
+    
+    Previously on a duplicate, %ENV would have the last entry for the name
+    from environ[], but a typical getenv() would return the first entry.
+    
+    Rather than assuming all getenv() implementations return the first entry
+    explicitly call getenv() to ensure they agree.
+    
+    b) remove duplicate entries from environ
+    
+    Previously if there was a duplicate definition for a name in environ[]
+    setting that name in %ENV could result in an unsafe value being passed
+    to a child process, so ensure environ[] has no duplicates.
+
+--- perl.c.orig	2014-10-01 01:33:00 UTC
++++ perl.c
+@@ -4272,23 +4272,70 @@ S_init_postdump_symbols(pTHX_ int argc, 
+ 	}
+ 	if (env) {
+ 	  char *s, *old_var;
++          STRLEN nlen;
+ 	  SV *sv;
++          HV *dups = newHV();
++
+ 	  for (; *env; env++) {
+ 	    old_var = *env;
+ 
+ 	    if (!(s = strchr(old_var,'=')) || s == old_var)
+ 		continue;
++            nlen = s - old_var;
+ 
+ #if defined(MSDOS) && !defined(DJGPP)
+ 	    *s = '\0';
+ 	    (void)strupr(old_var);
+ 	    *s = '=';
+ #endif
+-	    sv = newSVpv(s+1, 0);
+-	    (void)hv_store(hv, old_var, s - old_var, sv, 0);
++            if (hv_exists(hv, old_var, nlen)) {
++                const char *name = savepvn(old_var, nlen);
++
++                /* make sure we use the same value as getenv(), otherwise code that
++                   uses getenv() (like setlocale()) might see a different value to %ENV
++                 */
++                sv = newSVpv(PerlEnv_getenv(name), 0);
++
++                /* keep a count of the dups of this name so we can de-dup environ later */
++                if (hv_exists(dups, name, nlen))
++                    ++SvIVX(*hv_fetch(dups, name, nlen, 0));
++                else
++                    (void)hv_store(dups, name, nlen, newSViv(1), 0);
++
++                Safefree(name);
++            }
++            else {
++                sv = newSVpv(s+1, 0);
++            }
++	    (void)hv_store(hv, old_var, nlen, sv, 0);
+ 	    if (env_is_not_environ)
+ 	        mg_set(sv);
+ 	  }
++          if (HvKEYS(dups)) {
++              /* environ has some duplicate definitions, remove them */
++              HE *entry;
++              hv_iterinit(dups);
++              while ((entry = hv_iternext_flags(dups, 0))) {
++                  STRLEN nlen;
++                  const char *name = HePV(entry, nlen);
++                  IV count = SvIV(HeVAL(entry));
++                  IV i;
++                  SV **valp = hv_fetch(hv, name, nlen, 0);
++
++                  assert(valp);
++
++                  /* try to remove any duplicate names, depending on the
++                   * implementation used in my_setenv() the iteration might
++                   * not be necessary, but let's be safe.
++                   */
++                  for (i = 0; i < count; ++i)
++                      my_setenv(name, 0);
++
++                  /* and set it back to the value we set $ENV{name} to */
++                  my_setenv(name, SvPV_nolen(*valp));
++              }
++          }
++          SvREFCNT_dec_NN(dups);
+       }
+ #endif /* USE_ENVIRON_ARRAY */
+ #endif /* !PERL_MICRO */

Modified: branches/2016Q2/lang/perl5.18/pkg-plist
==============================================================================
--- branches/2016Q2/lang/perl5.18/pkg-plist	Tue May 10 03:00:13 2016	(r414913)
+++ branches/2016Q2/lang/perl5.18/pkg-plist	Tue May 10 03:10:09 2016	(r414914)
@@ -40,7 +40,7 @@ bin/shasum%%BINSUFFIX%%
 bin/splain%%BINSUFFIX%%
 bin/xsubpp%%BINSUFFIX%%
 bin/zipdetails%%BINSUFFIX%%
-etc/man.d/perl%%PERL_VER%%.conf
+etc/man.d/perl%%PKGNAMESUFFIX%%.conf
 %%PRIV_LIB%%/AnyDBM_File.pm
 %%PRIV_LIB%%/App/Cpan.pm
 %%PRIV_LIB%%/App/Prove.pm

Modified: branches/2016Q2/lang/perl5.20/Makefile
==============================================================================
--- branches/2016Q2/lang/perl5.20/Makefile	Tue May 10 03:00:13 2016	(r414913)
+++ branches/2016Q2/lang/perl5.20/Makefile	Tue May 10 03:10:09 2016	(r414914)
@@ -3,7 +3,7 @@
 
 PORTNAME=	perl
 PORTVERSION=	${PERL_VERSION}
-PORTREVISION=	8
+PORTREVISION=	12
 CATEGORIES=	lang devel perl5
 MASTER_SITES=	CPAN/../../src/5.0
 DIST_SUBDIR=	perl
@@ -17,7 +17,8 @@ LICENSE_FILE_ART10=	${WRKSRC}/Artistic
 LICENSE_FILE_GPLv1=	${WRKSRC}/Copying
 
 TEST_TARGET=	test_harness
-TEST_ENV=	${MAKE_ENV} TEST_JOBS=${MAKE_JOBS_NUMBER}
+TEST_ENV=	${MAKE_ENV} TEST_JOBS=${MAKE_JOBS_NUMBER} \
+		LD_LIBRARY_PATH=${WRKSRC} COMPRESS_ZLIB_RUN_ALL=yes
 
 OPTIONS_DEFINE=	DEBUG GDBM PERL_64BITINT PTHREAD \
 		MULTIPLICITY SITECUSTOMIZE
@@ -145,6 +146,7 @@ PLIST_SUB+=	PERL_VERSION=${PERL_VERSION}
 		SITE_PERL=${SITE_PERL_REL} \
 		SITE_ARCH=${SITE_ARCH_REL} \
 		PRIV_LIB=${_PRIV_LIB} \
+		PKGNAMESUFFIX=${PKGNAMESUFFIX} \
 		ARCH_LIB=${_ARCH_LIB}
 
 _PERL5_DEFAULT_FILE=	/tmp/PERL5_DEFAULT
@@ -233,6 +235,17 @@ post-patch-PTHREAD-off:
 		${WRKSRC}/hints/freebsd.sh
 .endif
 
+post-build:
+	@${REINPLACE_CMD} -e '/^lddlflags/s|-L${WRKSRC} ||' \
+		${WRKSRC}/lib/Config_heavy.pl
+.if ${CC} == /nxb-bin/usr/bin/cc
+	@${REINPLACE_CMD} -e 's=/nxb-bin==' \
+		${WRKSRC}/lib/Config.pm ${WRKSRC}/lib/Config_heavy.pl
+# Restore Config.pm's timestamp so that Perl's build system does not think it
+# needs to rebuild everything.
+	@${TOUCH} -r ${WRKSRC}/lib/Config.pm.bak ${WRKSRC}/lib/Config.pm
+.endif
+
 post-install:
 	${MKDIR} ${STAGEDIR}${SITE_MAN1} ${STAGEDIR}${SITE_MAN3}
 	${MKDIR} ${STAGEDIR}${SITE_ARCH}/auto
@@ -255,6 +268,6 @@ post-install:
 			${STRIP_CMD} $$f; \
 			${CHMOD} 444 $$f; \
 		done
-	${INSTALL_DATA} ${WRKDIR}/perl-man.conf ${STAGEDIR}${PREFIX}/etc/man.d/perl${PERL_VER}.conf
+	${INSTALL_DATA} ${WRKDIR}/perl-man.conf ${STAGEDIR}${PREFIX}/etc/man.d/perl${PKGNAMESUFFIX}.conf
 
 .include <bsd.port.mk>

Copied: branches/2016Q2/lang/perl5.20/files/patch-7098eff (from r413567, head/lang/perl5.20/files/patch-7098eff)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2016Q2/lang/perl5.20/files/patch-7098eff	Tue May 10 03:10:09 2016	(r414914, copy of r413567, head/lang/perl5.20/files/patch-7098eff)
@@ -0,0 +1,100 @@
+commit 7098efff946437a2db6013d12c4fc3193fc328ce
+Author: Tony Cook <tony at develop-help.com>
+Date:   2016-01-27 11:52:15 +1100
+
+    remove duplicate environment variables from environ
+    
+    If we see duplicate environment variables while iterating over
+    environ[]:
+    
+    a) make sure we use the same value in %ENV that getenv() returns.
+    
+    Previously on a duplicate, %ENV would have the last entry for the name
+    from environ[], but a typical getenv() would return the first entry.
+    
+    Rather than assuming all getenv() implementations return the first entry
+    explicitly call getenv() to ensure they agree.
+    
+    b) remove duplicate entries from environ
+    
+    Previously if there was a duplicate definition for a name in environ[]
+    setting that name in %ENV could result in an unsafe value being passed
+    to a child process, so ensure environ[] has no duplicates.
+
+diff --git perl.c perl.c
+index d3e378f..25e2075 100644
+--- perl.c
++++ perl.c
+@@ -4281,23 +4281,70 @@ S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env)
+ 	}
+ 	if (env) {
+ 	  char *s, *old_var;
++          STRLEN nlen;
+ 	  SV *sv;
++          HV *dups = newHV();
++
+ 	  for (; *env; env++) {
+ 	    old_var = *env;
+ 
+ 	    if (!(s = strchr(old_var,'=')) || s == old_var)
+ 		continue;
++            nlen = s - old_var;
+ 
+ #if defined(MSDOS) && !defined(DJGPP)
+ 	    *s = '\0';
+ 	    (void)strupr(old_var);
+ 	    *s = '=';
+ #endif
+-	    sv = newSVpv(s+1, 0);
+-	    (void)hv_store(hv, old_var, s - old_var, sv, 0);
++            if (hv_exists(hv, old_var, nlen)) {
++                const char *name = savepvn(old_var, nlen);
++
++                /* make sure we use the same value as getenv(), otherwise code that
++                   uses getenv() (like setlocale()) might see a different value to %ENV
++                 */
++                sv = newSVpv(PerlEnv_getenv(name), 0);
++
++                /* keep a count of the dups of this name so we can de-dup environ later */
++                if (hv_exists(dups, name, nlen))
++                    ++SvIVX(*hv_fetch(dups, name, nlen, 0));
++                else
++                    (void)hv_store(dups, name, nlen, newSViv(1), 0);
++
++                Safefree(name);
++            }
++            else {
++                sv = newSVpv(s+1, 0);
++            }
++	    (void)hv_store(hv, old_var, nlen, sv, 0);
+ 	    if (env_is_not_environ)
+ 	        mg_set(sv);
+ 	  }
++          if (HvKEYS(dups)) {
++              /* environ has some duplicate definitions, remove them */
++              HE *entry;
++              hv_iterinit(dups);
++              while ((entry = hv_iternext_flags(dups, 0))) {
++                  STRLEN nlen;
++                  const char *name = HePV(entry, nlen);
++                  IV count = SvIV(HeVAL(entry));
++                  IV i;
++                  SV **valp = hv_fetch(hv, name, nlen, 0);
++
++                  assert(valp);
++
++                  /* try to remove any duplicate names, depending on the
++                   * implementation used in my_setenv() the iteration might
++                   * not be necessary, but let's be safe.
++                   */
++                  for (i = 0; i < count; ++i)
++                      my_setenv(name, 0);
++
++                  /* and set it back to the value we set $ENV{name} to */
++                  my_setenv(name, SvPV_nolen(*valp));
++              }
++          }
++          SvREFCNT_dec_NN(dups);
+       }
+ #endif /* USE_ENVIRON_ARRAY */
+ #endif /* !PERL_MICRO */

Modified: branches/2016Q2/lang/perl5.20/pkg-plist
==============================================================================
--- branches/2016Q2/lang/perl5.20/pkg-plist	Tue May 10 03:00:13 2016	(r414913)
+++ branches/2016Q2/lang/perl5.20/pkg-plist	Tue May 10 03:10:09 2016	(r414914)
@@ -36,7 +36,7 @@ bin/shasum%%BINSUFFIX%%
 bin/splain%%BINSUFFIX%%
 bin/xsubpp%%BINSUFFIX%%
 bin/zipdetails%%BINSUFFIX%%
-etc/man.d/perl%%PERL_VER%%.conf
+etc/man.d/perl%%PKGNAMESUFFIX%%.conf
 %%PRIV_LIB%%/AnyDBM_File.pm
 %%PRIV_LIB%%/App/Cpan.pm
 %%PRIV_LIB%%/App/Prove.pm

Modified: branches/2016Q2/lang/perl5.22/Makefile
==============================================================================
--- branches/2016Q2/lang/perl5.22/Makefile	Tue May 10 03:00:13 2016	(r414913)
+++ branches/2016Q2/lang/perl5.22/Makefile	Tue May 10 03:10:09 2016	(r414914)
@@ -3,7 +3,7 @@
 
 PORTNAME=	perl
 DISTVERSION=	${PERL_VERSION}
-PORTREVISION=	4
+PORTREVISION=	8
 CATEGORIES=	lang devel perl5
 MASTER_SITES=	CPAN/../../src/5.0 CPAN/../by-authors/id/S/SH/SHAY
 DIST_SUBDIR=	perl
@@ -17,7 +17,8 @@ LICENSE_FILE_ART10=	${WRKSRC}/Artistic
 LICENSE_FILE_GPLv1=	${WRKSRC}/Copying
 
 TEST_TARGET=	test_harness
-TEST_ENV=	${MAKE_ENV} TEST_JOBS=${MAKE_JOBS_NUMBER}
+TEST_ENV=	${MAKE_ENV} TEST_JOBS=${MAKE_JOBS_NUMBER} \
+		LD_LIBRARY_PATH=${WRKSRC} COMPRESS_ZLIB_RUN_ALL=yes
 
 OPTIONS_DEFINE=	DEBUG GDBM PERL_64BITINT PTHREAD \
 		MULTIPLICITY SITECUSTOMIZE
@@ -143,6 +144,7 @@ PLIST_SUB+=	PERL_VERSION=${PERL_VERSION}
 		SITE_PERL=${SITE_PERL_REL} \
 		SITE_ARCH=${SITE_ARCH_REL} \
 		PRIV_LIB=${_PRIV_LIB} \
+		PKGNAMESUFFIX=${PKGNAMESUFFIX} \
 		ARCH_LIB=${_ARCH_LIB}
 
 _PERL5_DEFAULT_FILE=	/tmp/PERL5_DEFAULT
@@ -231,6 +233,17 @@ post-patch-PTHREAD-off:
 		${WRKSRC}/hints/freebsd.sh
 .endif
 
+post-build:
+	@${REINPLACE_CMD} -e '/^lddlflags/s|-L${WRKSRC} ||' \
+		${WRKSRC}/lib/Config_heavy.pl
+.if ${CC} == /nxb-bin/usr/bin/cc
+	@${REINPLACE_CMD} -e 's=/nxb-bin==' \
+		${WRKSRC}/lib/Config.pm ${WRKSRC}/lib/Config_heavy.pl
+# Restore Config.pm's timestamp so that Perl's build system does not think it
+# needs to rebuild everything.
+	@${TOUCH} -r ${WRKSRC}/lib/Config.pm.bak ${WRKSRC}/lib/Config.pm
+.endif
+
 post-install:
 	${MKDIR} ${STAGEDIR}${SITE_MAN1} ${STAGEDIR}${SITE_MAN3}
 	${MKDIR} ${STAGEDIR}${SITE_ARCH}/auto
@@ -253,6 +266,6 @@ post-install:
 			${STRIP_CMD} $$f; \
 			${CHMOD} 444 $$f; \
 		done
-	${INSTALL_DATA} ${WRKDIR}/perl-man.conf ${STAGEDIR}${PREFIX}/etc/man.d/perl${PERL_VER}.conf
+	${INSTALL_DATA} ${WRKDIR}/perl-man.conf ${STAGEDIR}${PREFIX}/etc/man.d/perl${PKGNAMESUFFIX}.conf
 
 .include <bsd.port.mk>

Copied: branches/2016Q2/lang/perl5.22/files/patch-58eaa11 (from r413567, head/lang/perl5.22/files/patch-58eaa11)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/2016Q2/lang/perl5.22/files/patch-58eaa11	Tue May 10 03:10:09 2016	(r414914, copy of r413567, head/lang/perl5.22/files/patch-58eaa11)
@@ -0,0 +1,100 @@
+commit 58eaa1131a38c16ee4a66d0bc36288cfde1a39bf
+Author: Tony Cook <tony at develop-help.com>
+Date:   2016-01-27 11:52:15 +1100
+
+    remove duplicate environment variables from environ
+    
+    If we see duplicate environment variables while iterating over
+    environ[]:
+    
+    a) make sure we use the same value in %ENV that getenv() returns.
+    
+    Previously on a duplicate, %ENV would have the last entry for the name
+    from environ[], but a typical getenv() would return the first entry.
+    
+    Rather than assuming all getenv() implementations return the first entry
+    explicitly call getenv() to ensure they agree.
+    
+    b) remove duplicate entries from environ
+    
+    Previously if there was a duplicate definition for a name in environ[]
+    setting that name in %ENV could result in an unsafe value being passed
+    to a child process, so ensure environ[] has no duplicates.
+
+diff --git perl.c perl.c
+index 16a6ca4..8ef7474 100644
+--- perl.c
++++ perl.c
+@@ -4298,23 +4298,70 @@ S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env)
+ 	}
+ 	if (env) {
+ 	  char *s, *old_var;
++          STRLEN nlen;
+ 	  SV *sv;
++          HV *dups = newHV();
++
+ 	  for (; *env; env++) {
+ 	    old_var = *env;
+ 
+ 	    if (!(s = strchr(old_var,'=')) || s == old_var)
+ 		continue;
++            nlen = s - old_var;
+ 
+ #if defined(MSDOS) && !defined(DJGPP)
+ 	    *s = '\0';
+ 	    (void)strupr(old_var);
+ 	    *s = '=';
+ #endif
+-	    sv = newSVpv(s+1, 0);
+-	    (void)hv_store(hv, old_var, s - old_var, sv, 0);
++            if (hv_exists(hv, old_var, nlen)) {
++                const char *name = savepvn(old_var, nlen);
++
++                /* make sure we use the same value as getenv(), otherwise code that
++                   uses getenv() (like setlocale()) might see a different value to %ENV
++                 */
++                sv = newSVpv(PerlEnv_getenv(name), 0);
++
++                /* keep a count of the dups of this name so we can de-dup environ later */
++                if (hv_exists(dups, name, nlen))
++                    ++SvIVX(*hv_fetch(dups, name, nlen, 0));
++                else
++                    (void)hv_store(dups, name, nlen, newSViv(1), 0);
++
++                Safefree(name);
++            }
++            else {
++                sv = newSVpv(s+1, 0);
++            }
++	    (void)hv_store(hv, old_var, nlen, sv, 0);
+ 	    if (env_is_not_environ)
+ 	        mg_set(sv);
+ 	  }
++          if (HvKEYS(dups)) {
++              /* environ has some duplicate definitions, remove them */
++              HE *entry;
++              hv_iterinit(dups);
++              while ((entry = hv_iternext_flags(dups, 0))) {
++                  STRLEN nlen;
++                  const char *name = HePV(entry, nlen);
++                  IV count = SvIV(HeVAL(entry));
++                  IV i;
++                  SV **valp = hv_fetch(hv, name, nlen, 0);
++
++                  assert(valp);
++
++                  /* try to remove any duplicate names, depending on the
++                   * implementation used in my_setenv() the iteration might
++                   * not be necessary, but let's be safe.
++                   */
++                  for (i = 0; i < count; ++i)
++                      my_setenv(name, 0);
++
++                  /* and set it back to the value we set $ENV{name} to */
++                  my_setenv(name, SvPV_nolen(*valp));
++              }
++          }
++          SvREFCNT_dec_NN(dups);
+       }
+ #endif /* USE_ENVIRON_ARRAY */
+ #endif /* !PERL_MICRO */

Modified: branches/2016Q2/lang/perl5.22/pkg-plist
==============================================================================
--- branches/2016Q2/lang/perl5.22/pkg-plist	Tue May 10 03:00:13 2016	(r414913)
+++ branches/2016Q2/lang/perl5.22/pkg-plist	Tue May 10 03:10:09 2016	(r414914)
@@ -32,7 +32,7 @@ bin/shasum%%BINSUFFIX%%
 bin/splain%%BINSUFFIX%%
 bin/xsubpp%%BINSUFFIX%%
 bin/zipdetails%%BINSUFFIX%%
-etc/man.d/perl%%PERL_VER%%.conf
+etc/man.d/perl%%PKGNAMESUFFIX%%.conf
 %%PRIV_LIB%%/AnyDBM_File.pm
 %%PRIV_LIB%%/App/Cpan.pm
 %%PRIV_LIB%%/App/Prove.pm


More information about the svn-ports-all mailing list