diff options
-rw-r--r-- | dev-perl/DBD-mysql/DBD-mysql-4.41.0-r1.ebuild | 68 | ||||
-rw-r--r-- | dev-perl/DBD-mysql/files/4.041-amvis-type-conversions.patch | 47 |
2 files changed, 115 insertions, 0 deletions
diff --git a/dev-perl/DBD-mysql/DBD-mysql-4.41.0-r1.ebuild b/dev-perl/DBD-mysql/DBD-mysql-4.41.0-r1.ebuild new file mode 100644 index 000000000000..1c899123f578 --- /dev/null +++ b/dev-perl/DBD-mysql/DBD-mysql-4.41.0-r1.ebuild @@ -0,0 +1,68 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +DIST_AUTHOR=MICHIELB +DIST_VERSION=4.041 +inherit eutils perl-module + +DESCRIPTION="MySQL driver for the Perl5 Database Interface (DBI)" + +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x64-solaris ~x86-solaris" + +# embedded=on disables ssl support +# https://metacpan.org/source/MICHIELB/DBD-mysql-4.036/dbdimp.c#L1886 +REQUIRED_USE="?? ( embedded ssl )" +IUSE="embedded test +ssl" + +RDEPEND=">=dev-perl/DBI-1.609.0 + virtual/libmysqlclient:= + embedded? ( virtual/mysql[embedded] ) +" +DEPEND="${RDEPEND} + virtual/perl-ExtUtils-MakeMaker + virtual/perl-Data-Dumper + test? ( + dev-perl/Test-Deep + >=virtual/perl-Test-Simple-0.900.0 + virtual/perl-Time-HiRes + ) +" +PATCHES=( + "${FILESDIR}/${DIST_VERSION}-no-dot-inc.patch" + "${FILESDIR}/${DIST_VERSION}-amvis-type-conversions.patch" +) +src_configure() { + if use test; then + myconf="${myconf} --testdb=test \ + --testhost=localhost \ + --testuser=test \ + --testpassword=test" + fi + myconf="${myconf} --$(usex ssl ssl nossl)" + use embedded && myconf="${myconf} --force-embedded --embedded=mysql_config" + perl-module_src_configure +} + +# Parallel testing is broken as 2 tests create the same table +# and mysql isn't acid compliant and can't limit visibility of tables +# to a transaction... +DIST_TEST="do" + +src_test() { + einfo + einfo "If tests fail, you have to configure your MySQL instance to create" + einfo "and grant some privileges to the test user." + einfo "You can run the following commands at the MySQL prompt: " + einfo "> CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';" + einfo "> CREATE DATABASE test;" + einfo "> GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost';" + einfo + sleep 5 + perl_rm_files t/pod.t t/manifest.t + # Don't be a hero and try to do EXTENDED_TESTING=1 unless you can figure + # out why 60leaks.t fails + perl-module_src_test +} diff --git a/dev-perl/DBD-mysql/files/4.041-amvis-type-conversions.patch b/dev-perl/DBD-mysql/files/4.041-amvis-type-conversions.patch new file mode 100644 index 000000000000..041ba0a496a6 --- /dev/null +++ b/dev-perl/DBD-mysql/files/4.041-amvis-type-conversions.patch @@ -0,0 +1,47 @@ +From: Pali <pali@cpan.org> +Date: Fri, 24 Feb 2017 19:51:36 +0100 +Subject: [PATCH] Fix type conversions + +Calling SvNV() for magical scalar is not enough for float type conversion. +It caused problem for Amavis in tainted mode -- all float values were zero. +On the other hand SvIV() and SvUV() seems to work fine. To be sure that +correct value of float is in scalar use sv_setnv() with explicit NV float +value. Similar code is changed also for integers IV/UV. + +This patch should fix reported Amavis bug: +https://github.com/perl5-dbi/DBD-mysql/issues/78 + +See also reported perl bug about SvNV(): +https://rt.perl.org/Public/Bug/Display.html?id=130801 + +Bugs: https://github.com/perl5-dbi/DBD-mysql/issues/78 +Bugs-Debian: https://bugs.debian.org/856064 + +--- a/dbdimp.c ++++ b/dbdimp.c +@@ -4250,8 +4250,7 @@ + switch (mysql_to_perl_type(fields[i].type)) { + case MYSQL_TYPE_DOUBLE: + /* Coerce to dobule and set scalar as NV */ +- (void) SvNV(sv); +- SvNOK_only(sv); ++ sv_setnv(sv, SvNV(sv)); + break; + + case MYSQL_TYPE_LONG: +@@ -4259,13 +4258,11 @@ + /* Coerce to integer and set scalar as UV resp. IV */ + if (fields[i].flags & UNSIGNED_FLAG) + { +- (void) SvUV(sv); +- SvIOK_only_UV(sv); ++ sv_setuv(sv, SvUV(sv)); + } + else + { +- (void) SvIV(sv); +- SvIOK_only(sv); ++ sv_setiv(sv, SvIV(sv)); + } + break; + |