From 1357c14500cd4724e6f215893532cb46a7643351 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 24 Nov 2008 10:11:09 +0000 Subject: * DBD::SQLite needs a patch to prevent segfaults in case of timeouts. svn path=/nixpkgs/trunk/; revision=13386 --- .../perl-modules/DBD-SQLite/default.nix | 19 ++++++++++ .../perl-modules/DBD-SQLite/reset.patch | 40 ++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 pkgs/development/perl-modules/DBD-SQLite/default.nix create mode 100644 pkgs/development/perl-modules/DBD-SQLite/reset.patch (limited to 'pkgs/development/perl-modules/DBD-SQLite') diff --git a/pkgs/development/perl-modules/DBD-SQLite/default.nix b/pkgs/development/perl-modules/DBD-SQLite/default.nix new file mode 100644 index 000000000000..4b2936fe6ebf --- /dev/null +++ b/pkgs/development/perl-modules/DBD-SQLite/default.nix @@ -0,0 +1,19 @@ +{fetchurl, perl, perlDBI, sqlite}: + +import ../generic perl { + name = "DBD-SQLite-1.14"; + + src = fetchurl { + url = mirror://cpan/authors/id/M/MS/MSERGEANT/DBD-SQLite-1.14.tar.gz; + sha256 = "01qd5xfx702chg3bv2k727kfdp84zy5xh31y6njvivkp78vrs624"; + }; + + propagatedBuildInputs = [perlDBI]; + + makeMakerFlags = "SQLITE_LOCATION=${sqlite}"; + + patches = [ + # Prevent segfaults in case of timeouts. + ./reset.patch + ]; +} diff --git a/pkgs/development/perl-modules/DBD-SQLite/reset.patch b/pkgs/development/perl-modules/DBD-SQLite/reset.patch new file mode 100644 index 000000000000..af6a0b73796e --- /dev/null +++ b/pkgs/development/perl-modules/DBD-SQLite/reset.patch @@ -0,0 +1,40 @@ +diff -rc DBD-SQLite-1.14-orig/dbdimp.c DBD-SQLite-1.14/dbdimp.c +*** DBD-SQLite-1.14-orig/dbdimp.c 2007-08-24 04:51:25.000000000 +0200 +--- DBD-SQLite-1.14/dbdimp.c 2008-11-10 18:31:53.000000000 +0100 +*************** +*** 398,405 **** + if (imp_sth->retval == SQLITE_ROW) { + continue; + } +! /* There are bug reports that say this should be sqlite3_reset() */ +! sqlite3_finalize(imp_sth->stmt); + sqlite_error(sth, (imp_xxh_t*)imp_sth, imp_sth->retval, (char*)sqlite3_errmsg(imp_dbh->db)); + return -5; + } +--- 398,404 ---- + if (imp_sth->retval == SQLITE_ROW) { + continue; + } +! sqlite3_reset(imp_sth->stmt); + sqlite_error(sth, (imp_xxh_t*)imp_sth, imp_sth->retval, (char*)sqlite3_errmsg(imp_dbh->db)); + return -5; + } +*************** +*** 418,425 **** + case SQLITE_DONE: DBIc_ACTIVE_on(imp_sth); + sqlite_trace(5, "exec ok - %d rows, %d cols\n", imp_sth->nrow, DBIc_NUM_FIELDS(imp_sth)); + return 0; +! /* There are bug reports that say this should be sqlite3_reset() */ +! default: sqlite3_finalize(imp_sth->stmt); + sqlite_error(sth, (imp_xxh_t*)imp_sth, imp_sth->retval, (char*)sqlite3_errmsg(imp_dbh->db)); + return -6; + } +--- 417,423 ---- + case SQLITE_DONE: DBIc_ACTIVE_on(imp_sth); + sqlite_trace(5, "exec ok - %d rows, %d cols\n", imp_sth->nrow, DBIc_NUM_FIELDS(imp_sth)); + return 0; +! default: sqlite3_reset(imp_sth->stmt); + sqlite_error(sth, (imp_xxh_t*)imp_sth, imp_sth->retval, (char*)sqlite3_errmsg(imp_dbh->db)); + return -6; + } +Only in DBD-SQLite-1.14/: dbdimp.c~ -- cgit 1.4.1