iliaa Sun May 30 14:58:49 2004 EDT
Modified files: (Branch: PHP_4_3)
/php-src/ext/informix ifx.ec
Log:
MFH: Fixed memory leak on ifx_error().
http://cvs.php.net/diff.php/php-src/ext/informix/ifx.ec?r1=1.69.2.23&r2=1.69.2.24&ty=u
Index: php-src/ext/informix/ifx.ec
diff -u php-src/ext/informix/ifx.ec:1.69.2.23 php-src/ext/informix/ifx.ec:1.69.2.24
--- php-src/ext/informix/ifx.ec:1.69.2.23 Sun May 30 13:57:36 2004
+++ php-src/ext/informix/ifx.ec Sun May 30 14:58:48 2004
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: ifx.ec,v 1.69.2.23 2004/05/30 17:57:36 iliaa Exp $ */
+/* $Id: ifx.ec,v 1.69.2.24 2004/05/30 18:58:48 iliaa Exp $ */
/* -------------------------------------------------------------------
* if you want a function reference : "grep '^\*\*' ifx.ec" will give
@@ -127,7 +127,9 @@
{ \
if (ifx_check() < 0) { \
IFXG(sv_sqlcode) = SQLCODE; \
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Set connection %s fails
(%s)", ifx, ifx_error(ifx)); \
+ char *ifx_err = ifx_error(ifx); \
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Set connection %s fails
(%s)", ifx, ifx_err); \
+ efree(ifx_err); \
RETURN_FALSE; \
} \
}
@@ -287,6 +289,7 @@
PARAMETER char *link;
EXEC SQL END DECLARE SECTION;
{
+ char *ifx_err = null;
TSRMLS_FETCH();
EXEC SQL SET CONNECTION :link;
@@ -303,7 +306,7 @@
EXEC SQL DISCONNECT :link;
if (ifx_check() < 0) {
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Disconnect link %s after Automatic Rollback fails (%s)", link, ifx_error(link));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Disconnect link %s after Automatic Rollback fails (%s)", link, (ifx_err =
ifx_error(link)));
}
}
if (ifx_check() < 0) {
@@ -311,20 +314,23 @@
EXEC SQL CLOSE DATABASE;
if (ifx_check() < 0) {
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Close database fails %s (%s)", link, ifx_error(link));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Close database fails %s (%s)", link, (ifx_err = ifx_error(link)));
}
}
}
else if (SQLCODE < 0) {
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Disconnect link
%s fails (%s)", link, ifx_error(link));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Disconnect link
%s fails (%s)", link, (ifx_err = ifx_error(link)));
}
}
else {
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Set connection %s fails
(%s)", link, ifx_error(link));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Set connection %s fails
(%s)", link, (ifx_err = ifx_error(link)));
}
+ if (ifx_err) {
+ efree(ifx_err);
+ }
}
static void _close_ifx_link(zend_rsrc_list_entry *rsrc TSRMLS_DC)
@@ -541,8 +547,10 @@
EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd
WITH CONCURRENT TRANSACTION;
if (ifx_check() == IFX_ERROR) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",
ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",
ifx_err);
+ efree(ifx_err);
free(ifx);
efree(hashed_details);
RETURN_FALSE;
@@ -570,9 +578,11 @@
EXEC SQL CONNECT TO :host AS :ifx USER :user USING
:passwd WITH CONCURRENT TRANSACTION;
if (ifx_check() == IFX_ERROR) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Link to server lost, unable to reconnect (%s)", ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Link to server lost, unable to reconnect (%s)", ifx_err);
zend_hash_del(&EG(persistent_list),
hashed_details, hashed_details_length + 1);
+ efree(ifx_err);
efree(hashed_details);
RETURN_FALSE;
}
@@ -608,10 +618,12 @@
EXEC SQL CONNECT TO :host AS :ifx USER :user
USING :passwd WITH CONCURRENT TRANSACTION;
if (ifx_check() == IFX_ERROR) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC,
E_WARNING, "Unable to connect (%s)", ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC,
E_WARNING, "Unable to connect (%s)", ifx_err);
zend_hash_del(&EG(regular_list),
hashed_details, hashed_details_length + 1);
efree(hashed_details);
+ efree(ifx_err);
RETURN_FALSE;
}
}
@@ -638,8 +650,10 @@
EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH
CONCURRENT TRANSACTION;
if (ifx_check() == IFX_ERROR) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",
ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ifx_err);
+ efree(ifx_err);
efree(hashed_details);
efree(ifx);
RETURN_FALSE;
@@ -814,8 +828,10 @@
EXEC SQL PREPARE :statemid FROM :statement;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prepare fails (%s)",
ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prepare fails (%s)",
ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -846,10 +862,12 @@
}
if (!php_intifx_alloc_ibind(Ifx_Result, num_params TSRMLS_CC)) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
EXEC SQL free :statemid;
efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate i_desciptor <%s>
fails (%s)", i_descrpid, ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate i_desciptor <%s>
fails (%s)", i_descrpid, ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -860,18 +878,22 @@
EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX :desc_count;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate desciptor <%s>
fails (%s)", descrpid, ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate desciptor <%s>
fails (%s)", descrpid, ifx_err);
EXEC SQL free :statemid;
+ efree(ifx_err);
RETURN_FALSE;
}
EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Describe fails (%s)",
ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Describe fails (%s)",
ifx_err);
EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
EXEC SQL free :statemid;
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -971,11 +993,13 @@
}
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
EXEC SQL free :statemid;
efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Execute immediate fails : %s", ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Execute immediate fails : %s", ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -996,13 +1020,15 @@
}
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
if (Ifx_Result->numicols > 0) {
EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
}
EXEC SQL free :statemid;
efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate
fails : %s", ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate
fails : %s", ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */
@@ -1039,11 +1065,13 @@
EXEC SQL GET DESCRIPTOR :descrpid :fieldcount = COUNT;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
EXEC SQL free :statemid;
efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not get
descriptor %s (%s)", descrpid, ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not get
descriptor %s (%s)", descrpid, ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -1076,22 +1104,26 @@
}
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
EXEC SQL free :statemid;
efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Declare cursor
fails (%s)", ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Declare cursor
fails (%s)", ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
EXEC SQL OPEN :cursorid;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
EXEC SQL free :statemid;
EXEC SQL free :cursorid;
efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Open cursor fails
(%s)", ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Open cursor fails
(%s)", ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -1254,10 +1286,12 @@
}
if (!php_intifx_alloc_ibind(Ifx_Result, num_params TSRMLS_CC)) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
EXEC SQL free :statemid;
efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate i_desciptor <%s>
fails (%s)", i_descrpid, ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate i_desciptor <%s>
fails (%s)", i_descrpid, ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -1268,18 +1302,22 @@
EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX :desc_count;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate desciptor <%s>
fails (%s)", descrpid, ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate desciptor <%s>
fails (%s)", descrpid, ifx_err);
EXEC SQL free :statemid;
+ efree(ifx_err);
RETURN_FALSE;
}
EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Describe fails (%s)",
ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Describe fails (%s)",
ifx_err);
EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
EXEC SQL free :statemid;
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -1381,11 +1419,13 @@
}
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx)
IFXG(sv_sqlcode) = SQLCODE;
EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
EXEC SQL free :statemid;
efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Prepare fails : %s", ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Prepare fails : %s", ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -1438,11 +1478,13 @@
EXEC SQL GET DESCRIPTOR :descrpid :fieldcount = COUNT;
if (ifx_check() < 0) {
+ char *ifx_err;
IFXG(sv_sqlcode) = SQLCODE;
EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
EXEC SQL free :statemid;
efree(Ifx_Result);
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not get
descriptor %s (%s)", descrpid, ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not get
descriptor %s (%s)", descrpid, (ifx_err = ifx_error(ifx)));
+ efree(ifx_err);
RETURN_FALSE;
}
Ifx_Result->numcols = fieldcount;
@@ -1528,8 +1570,10 @@
EXEC SQL EXECUTE :statemid;
}
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate
fails: %s", ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate
fails: %s", ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */
@@ -1552,15 +1596,19 @@
}
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Declare cursor
fails (%s)", ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Declare cursor
fails (%s)", ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
EXEC SQL OPEN :cursorid;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Open cursor fails
(%s)", ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Open cursor fails
(%s)", ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -1897,8 +1945,12 @@
switch (ifx_check()) {
case IFX_ERROR:
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not
fetch row on cursor %s (%s)", ifx_error(ifx), cursorid);
- RETURN_FALSE;
+ {
+ char *ifx_err = ifx_error(ifx);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Can not fetch row on cursor %s (%s)", ifx_err, cursorid);
+ efree(ifx_err);
+ RETURN_FALSE;
+ }
break;
case IFX_NODATA:
RETURN_FALSE;
@@ -1921,8 +1973,10 @@
:indicator = INDICATOR;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor
(field # %d) fails (%s)", i, ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor
(field # %d) fails (%s)", i, ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -2247,7 +2301,11 @@
switch (ifx_check()) {
case IFX_ERROR:
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not fetch
next row on cursor %s (%s)", ifx_error(ifx), cursorid);
+ {
+ char *ifx_err = ifx_error(ifx);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not
fetch next row on cursor %s (%s)", ifx_err, cursorid);
+ efree(ifx_err);
+ }
RETURN_FALSE;
break;
case IFX_NODATA:
@@ -2276,8 +2334,10 @@
for (i = 1; i <= num_fields; i++) {
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldname = NAME;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor
(field # %d) fails (%s)", i, ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor
(field # %d) fails (%s)", i, ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -2303,8 +2363,10 @@
:indicator = INDICATOR;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get
descriptor (field # %d) fails (%s)", i, ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get
descriptor (field # %d) fails (%s)", i, ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -2475,7 +2537,11 @@
switch (ifx_check()) {
case IFX_ERROR:
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not
fetch next row on cursor %s (%s)", ifx_error(ifx), cursorid);
+ {
+ char *ifx_err = ifx_error(ifx);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Can not fetch next row on cursor %s (%s)", ifx_err, cursorid);
+ efree(ifx_err);
+ }
RETURN_FALSE;
break;
case IFX_NODATA:
@@ -2549,8 +2615,10 @@
for (i = 1; i <= num_fields; i++) {
EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldname = NAME,
:fieldtype = TYPE;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor
(field # %d) fails (%s)", i, ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor
(field # %d) fails (%s)", i, ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
@@ -2712,8 +2780,10 @@
:isnullable = NULLABLE;
if (ifx_check() < 0) {
+ char *ifx_err = ifx_error(ifx);
IFXG(sv_sqlcode) = SQLCODE;
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor
(field # %d) fails (%s)", i, ifx_error(ifx));
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor
(field # %d) fails (%s)", i, ifx_err);
+ efree(ifx_err);
RETURN_FALSE;
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php