summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dev-perl/DBD-mysql/DBD-mysql-4.41.0-r1.ebuild68
-rw-r--r--dev-perl/DBD-mysql/files/4.041-amvis-type-conversions.patch47
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;
+