aboutsummaryrefslogtreecommitdiff
path: root/databases/p5-DBD-InterBase
diff options
context:
space:
mode:
authorSergey Skvortsov <skv@FreeBSD.org>2005-03-14 17:58:17 +0000
committerSergey Skvortsov <skv@FreeBSD.org>2005-03-14 17:58:17 +0000
commit1192594a157868a5bd12fb6371fa9199648e1c07 (patch)
tree888dfdae4f6500f11fe192f1317c57fa292390cb /databases/p5-DBD-InterBase
parent0fc2f42ae8e3586dd21bb3892330374ddaf607fc (diff)
downloadports-1192594a157868a5bd12fb6371fa9199648e1c07.tar.gz
ports-1192594a157868a5bd12fb6371fa9199648e1c07.zip
Import latest changes from project's repository:
* better error handling for blobs * prevent a possible buffer overflow in date handling * don't accept blob bind param for SELECT statement * remove pointless 'ib_cursorname' attribute. DBD does it automatically Also switch MASTER_SITE to use SourceForge (by mystical reason this module was disappeared from CPAN).
Notes
Notes: svn path=/head/; revision=131229
Diffstat (limited to 'databases/p5-DBD-InterBase')
-rw-r--r--databases/p5-DBD-InterBase/Makefile5
-rw-r--r--databases/p5-DBD-InterBase/files/patch-dbdimp.c162
-rw-r--r--databases/p5-DBD-InterBase/files/patch-dbdimp.h18
-rw-r--r--databases/p5-DBD-InterBase/pkg-descr3
4 files changed, 171 insertions, 17 deletions
diff --git a/databases/p5-DBD-InterBase/Makefile b/databases/p5-DBD-InterBase/Makefile
index a7e013a3c644..80fc48c3164e 100644
--- a/databases/p5-DBD-InterBase/Makefile
+++ b/databases/p5-DBD-InterBase/Makefile
@@ -7,9 +7,10 @@
PORTNAME= DBD-InterBase
PORTVERSION= 0.43
+PORTREVISION= 1
CATEGORIES= databases perl5
-MASTER_SITES= ${MASTER_SITE_PERL_CPAN}
-MASTER_SITE_SUBDIR= DBD
+MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
+MASTER_SITE_SUBDIR= dbi-interbase
PKGNAMEPREFIX= p5-
MAINTAINER= skv@FreeBSD.org
diff --git a/databases/p5-DBD-InterBase/files/patch-dbdimp.c b/databases/p5-DBD-InterBase/files/patch-dbdimp.c
index bcbe93e2b2d9..81b372f60d10 100644
--- a/databases/p5-DBD-InterBase/files/patch-dbdimp.c
+++ b/databases/p5-DBD-InterBase/files/patch-dbdimp.c
@@ -1,13 +1,109 @@
---- dbdimp.c 2004/02/25 04:38:03 1.105
-+++ dbdimp.c 2004/03/03 11:26:48 1.106
-@@ -1,5 +1,5 @@
- /*
-- $Id: dbdimp.c,v 1.105 2004/02/25 04:38:03 edpratomo Exp $
-+ $Id: dbdimp.c,v 1.106 2004/03/03 11:26:48 edpratomo Exp $
-
- Copyright (c) 1999-2004 Edwin Pratomo
- Portions Copyright (c) 2001-2003 Daniel Ritz
-@@ -2185,7 +2185,7 @@
+--- dbdimp.c.old Wed Feb 25 07:38:03 2004
++++ dbdimp.c Mon Mar 14 20:23:19 2005
+@@ -1002,9 +1002,6 @@
+ {
+ D_imp_dbh_from_sth;
+ ISC_STATUS status[ISC_STATUS_LENGTH];
+- char stmt_info[1], count_info[1];
+- char info_buffer[20], count_buffer[33];
+- char *p;
+ int result = -2;
+ int row_count = 0;
+
+@@ -1543,7 +1540,10 @@
+ blob_info_buffer);
+
+ if (ib_error_check(sth, status))
++ {
++ isc_cancel_blob(status, &blob_handle);
+ return FALSE;
++ }
+
+ /* Get the information out of the info buffer. */
+ for (p = blob_info_buffer; *p != isc_info_end; )
+@@ -1590,7 +1590,7 @@
+ if ((DBIc_LongReadLen(imp_sth) < (unsigned long) total_length) &&
+ (! DBIc_is(imp_dbh, DBIcf_LongTruncOk)))
+ {
+- isc_cancel_blob(status, &blob_handle);
++ isc_close_blob(status, &blob_handle);
+ do_error(sth, 1, "Not enough LongReadLen buffer.");
+ return FALSE;
+ break;
+@@ -1603,7 +1603,7 @@
+ sv_setpvn(sv, "** Blob exceeds maximum safe length **", 38);
+
+ /* I deliberately don't set FAILURE based on this. */
+- isc_cancel_blob(status, &blob_handle);
++ isc_close_blob(status, &blob_handle);
+ if (ib_error_check(sth, status))
+ return FALSE;
+ break;
+@@ -1620,12 +1620,15 @@
+ (short) BLOB_SEGMENT,
+ blob_segment_buffer);
+
++ if (status[1] == isc_segstr_eof)
++ break;
++
+ if (status[1] != isc_segment)
+ if (ib_error_check(sth, status))
++ {
++ isc_cancel_blob(status, &blob_handle);
+ return FALSE;
+-
+- if (status[1] == isc_segstr_eof)
+- break;
++ }
+
+ if (seg_length > DBIc_LongReadLen(imp_sth))
+ break;
+@@ -1744,11 +1747,7 @@
+ DBI_TRACE(2, (DBILOGFP, "dbd_st_destroy\n"));
+
+ /* freeing cursor name */
+- if (imp_sth->cursor_name != NULL)
+- {
+- safefree(imp_sth->cursor_name);
+- imp_sth->cursor_name = NULL;
+- }
++ FREE_SETNULL(imp_sth->cursor_name);
+
+ /* freeing in_sqlda */
+ if (imp_sth->in_sqlda)
+@@ -1955,31 +1954,6 @@
+
+ DBI_TRACE(2, (DBILOGFP, "dbd_st_STORE - %s\n", key));
+
+- if ((kl == 13) && (strcmp(key, "ib_cursorname") == 0))
+- {
+- if (DBIc_ACTIVE(imp_sth))
+- {
+- do_error(sth, 1, "Can't modify active statement cursor name.");
+- return FALSE;
+- }
+- else
+- {
+- STRLEN vl;
+- char *value = SvPV(valuesv, vl);
+-
+- if (imp_sth->cursor_name != NULL)
+- {
+- safefree(imp_sth->cursor_name);
+- imp_sth->cursor_name = NULL;
+- }
+- imp_sth->cursor_name = (char *)safemalloc(vl + 1);
+-
+- if (imp_sth->cursor_name != NULL)
+- strcpy(imp_sth->cursor_name, value);
+- else
+- return FALSE;
+- }
+- }
+ return FALSE;
+ }
+
+@@ -2185,7 +2159,7 @@
DBI_TRACE(1, (DBILOGFP, "ib_fill_isqlda: SQL_VARYING\n"));
{
char buf[25]; /* long long can have max 20 chars. */
@@ -16,7 +112,7 @@
if (ivar->sqldata == (char *) NULL)
{
if ((ivar->sqldata = (char *)safemalloc(
-@@ -2204,7 +2204,7 @@
+@@ -2204,7 +2178,7 @@
tmp = buf;
len = sprintf(tmp, "%ld", SvNV(value));
}
@@ -25,7 +121,15 @@
len = SvCUR(value);
tmp = SvPV_nolen(value);
}
-@@ -2261,7 +2261,7 @@
+@@ -2249,7 +2223,6 @@
+ {
+ do_error(sth, 2, "Cannot allocate buffer for TEXT input parameter \n");
+ retval = FALSE;
+- safefree(tmp);
+ break;
+ }
+ }
+@@ -2261,7 +2234,7 @@
tmp = buf;
len = sprintf(tmp, "%ld", SvNV(value));
}
@@ -34,3 +138,37 @@
len = SvCUR(value);
tmp = SvPV_nolen(value);
}
+@@ -2579,6 +2552,12 @@
+
+ ivar->sqltype = SQL_TEXT | (ivar->sqltype & 1);
+
++ /* prevent overflow */
++ if (len > 100) {
++ do_error(sth, 2, "DATE input parameter too long, but will try...\n");
++ len = 100;
++ }
++
+ /* workaround for date problem (bug #429820) */
+ ivar->sqlsubtype = 0x77; /* (0x77 is a random value) */
+
+@@ -2696,8 +2675,18 @@
+ case SQL_BLOB:
+ DBI_TRACE(1, (DBILOGFP, "ib_fill_isqlda: SQL_BLOB\n"));
+
+- /* we have an extra function for this */
+- retval = ib_blob_write(sth, imp_sth, ivar, value);
++ /* SELECT's can't have a blob as in_sqlda. */
++ if ((imp_sth->type == isc_info_sql_stmt_select) ||
++ (imp_sth->type == isc_info_sql_stmt_select_for_upd))
++ {
++ do_error(sth, 2, "BLOB as an input param for SELECT is not allowed.\n");
++ retval = FALSE;
++ break;
++ }
++ else
++ /* we have an extra function for this */
++ retval = ib_blob_write(sth, imp_sth, ivar, value);
++
+ break;
+
+ /**********************************************************************/
diff --git a/databases/p5-DBD-InterBase/files/patch-dbdimp.h b/databases/p5-DBD-InterBase/files/patch-dbdimp.h
new file mode 100644
index 000000000000..e183678d89bf
--- /dev/null
+++ b/databases/p5-DBD-InterBase/files/patch-dbdimp.h
@@ -0,0 +1,18 @@
+--- dbdimp.h.old Tue Feb 24 10:49:01 2004
++++ dbdimp.h Mon Mar 14 20:22:52 2005
+@@ -252,6 +252,7 @@
+ #define dbd_init ib_init
+ #define dbd_discon_all ib_discon_all
+ #define dbd_db_login ib_db_login
++#define dbd_db_login6 ib_db_login6
+ #define dbd_db_do ib_db_do
+ #define dbd_db_commit ib_db_commit
+ #define dbd_db_rollback ib_db_rollback
+@@ -283,6 +284,7 @@
+ int ib_commit_transaction (SV *h, imp_dbh_t *imp_dbh);
+ int ib_rollback_transaction(SV *h, imp_dbh_t *imp_dbh);
+ long ib_rows(SV *xxh, isc_stmt_handle *h_stmt, char count_type);
++void ib_cleanup_st_prepare (imp_sth_t *imp_sth);
+
+ SV* dbd_db_quote(SV* dbh, SV* str, SV* type);
+
diff --git a/databases/p5-DBD-InterBase/pkg-descr b/databases/p5-DBD-InterBase/pkg-descr
index 293912cd3a59..eee1bf6a7d75 100644
--- a/databases/p5-DBD-InterBase/pkg-descr
+++ b/databases/p5-DBD-InterBase/pkg-descr
@@ -2,6 +2,3 @@ DBD::InterBase is a Perl module which works with the DBI module to
provide access to InterBase databases.
WWW: http://search.cpan.org/dist/DBD-InterBase/
-
--- Sergey Skvortsov
-skv@FreeBSD.org