Update to 4.0.29 and fix a use-after-free (reported upstream). Comments ? Ok ? Cheers Giovanni
Index: Makefile =================================================================== RCS file: /var/cvs/ports/databases/p5-DBD-mysql/Makefile,v retrieving revision 1.41 diff -u -p -r1.41 Makefile --- Makefile 6 Dec 2014 14:26:44 -0000 1.41 +++ Makefile 27 Dec 2014 22:43:03 -0000 @@ -4,7 +4,7 @@ SHARED_ONLY= Yes COMMENT= MySQL drivers for the Perl DBI -DISTNAME= DBD-mysql-4.028 +DISTNAME= DBD-mysql-4.029 CATEGORIES= databases MAINTAINER= Giovanni Bechis <giova...@openbsd.org> Index: distinfo =================================================================== RCS file: /var/cvs/ports/databases/p5-DBD-mysql/distinfo,v retrieving revision 1.20 diff -u -p -r1.20 distinfo --- distinfo 6 Dec 2014 14:26:44 -0000 1.20 +++ distinfo 27 Dec 2014 22:43:11 -0000 @@ -1,2 +1,2 @@ -SHA256 (DBD-mysql-4.028.tar.gz) = WEKySv/avOixcSL5EM1bWyU78mbX5QhK9d9CSFI4Ee0= -SIZE (DBD-mysql-4.028.tar.gz) = 138614 +SHA256 (DBD-mysql-4.029.tar.gz) = pJ0cG8+swJzy0fpjiuZTwubFjrwIFgkwaSKCqxhz1Qw= +SIZE (DBD-mysql-4.029.tar.gz) = 139722 Index: patches/patch-dbdimp_c =================================================================== RCS file: patches/patch-dbdimp_c diff -N patches/patch-dbdimp_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-dbdimp_c 16 Jan 2015 08:13:35 -0000 @@ -0,0 +1,31 @@ +$OpenBSD$ +Fix a use-after-free if my_login fails + +--- dbdimp.c.orig Mon Dec 8 09:44:50 2014 ++++ dbdimp.c Sun Dec 28 00:40:38 2014 +@@ -2061,8 +2061,11 @@ static int my_login(pTHX_ SV* dbh, imp_dbh_t *imp_dbh) + result = mysql_dr_connect(dbh, imp_dbh->pmysql, mysql_socket, host, port, user, + password, dbname, imp_dbh) ? TRUE : FALSE; + if (fresh && !result) { ++ do_error(dbh, mysql_errno(imp_dbh->pmysql), ++ mysql_error(imp_dbh->pmysql) ,mysql_sqlstate(imp_dbh->pmysql)); + /* Prevent leaks, but do not free in case of a reconnect. See #97625 */ + Safefree(imp_dbh->pmysql); ++ imp_dbh->pmysql = NULL; + } + return result; + } +@@ -4953,9 +4956,11 @@ int mysql_db_reconnect(SV* h) + */ + if (!dbd_db_disconnect(h, imp_dbh) || !my_login(aTHX_ h, imp_dbh)) + { +- do_error(h, mysql_errno(imp_dbh->pmysql), mysql_error(imp_dbh->pmysql), ++ if(!imp_dbh->pmysql) { ++ do_error(h, mysql_errno(imp_dbh->pmysql), mysql_error(imp_dbh->pmysql), + mysql_sqlstate(imp_dbh->pmysql)); +- memcpy (imp_dbh->pmysql, &save_socket, sizeof(save_socket)); ++ memcpy (imp_dbh->pmysql, &save_socket, sizeof(save_socket)); ++ } + ++imp_dbh->stats.auto_reconnects_failed; + return FALSE; + } Index: pkg/PLIST =================================================================== RCS file: /var/cvs/ports/databases/p5-DBD-mysql/pkg/PLIST,v retrieving revision 1.7 diff -u -p -r1.7 PLIST --- pkg/PLIST 11 Jul 2014 14:11:12 -0000 1.7 +++ pkg/PLIST 27 Dec 2014 22:47:44 -0000 @@ -2,13 +2,13 @@ @comment ${P5ARCH}/Bundle/DBD/ @comment ${P5ARCH}/Bundle/DBD/mysql.pm @comment ${P5ARCH}/DBD/README.pod +@comment ${P5ARCH}/DBD/mysql/INSTALL.pod +@comment ${P5ARCH}/auto/DBD/mysql/mysql.bs ${P5ARCH}/DBD/mysql/ ${P5ARCH}/DBD/mysql.pm ${P5ARCH}/DBD/mysql/GetInfo.pm -@comment ${P5ARCH}/DBD/mysql/INSTALL.pod ${P5ARCH}/auto/DBD/ ${P5ARCH}/auto/DBD/mysql/ -@comment ${P5ARCH}/auto/DBD/mysql/mysql.bs ${P5ARCH}/auto/DBD/mysql/mysql.so @man man/man3p/Bundle::DBD::mysql.3p @man man/man3p/DBD::README.3p