]> granicus.if.org Git - php/commitdiff
Free error and message strings when cleaning up PDO instances that use pdo_dblib
authorAdam Baratz <adambaratz@php.net>
Tue, 13 Sep 2016 20:43:30 +0000 (16:43 -0400)
committerAdam Baratz <adambaratz@php.net>
Tue, 13 Sep 2016 20:43:30 +0000 (16:43 -0400)
ext/pdo_dblib/dblib_driver.c
ext/pdo_dblib/dblib_stmt.c
ext/pdo_dblib/pdo_dblib.c
ext/pdo_dblib/php_pdo_dblib_int.h

index 13ddd8a4723f7e1553f0e839d8ffdbd0a8162bdd..66e7d79fbdbaf42f3d2211effe539d7b45e71036 100644 (file)
@@ -88,6 +88,7 @@ static int dblib_handle_closer(pdo_dbh_t *dbh)
                }
                pefree(H, dbh->is_persistent);
                dbh->driver_data = NULL;
+               pdo_dblib_err_dtor(&H->err);
        }
        return 0;
 }
index 311d856d55074de988dffc0d2a04b95de42e4089..1c0577e6116f0d53b6e7a9b2e6aafea3a0c703e5 100644 (file)
@@ -95,22 +95,6 @@ static char *pdo_dblib_get_field_name(int type)
 }
 /* }}} */
 
-static void pdo_dblib_err_dtor(pdo_dblib_err *err)
-{
-       if (err->dberrstr) {
-               efree(err->dberrstr);
-               err->dberrstr = NULL;
-       }
-       if (err->lastmsg) {
-               efree(err->lastmsg);
-               err->lastmsg = NULL;
-       }
-       if (err->oserrstr) {
-               efree(err->oserrstr);
-               err->oserrstr = NULL;
-       }
-}
-
 static int pdo_dblib_stmt_cursor_closer(pdo_stmt_t *stmt)
 {
        pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data;
index b855224c683c86832f76ffa4d37631f697178185..9d119331ce9865b9523fc498e1032f4dce34aab3 100644 (file)
@@ -152,6 +152,26 @@ int pdo_dblib_msg_handler(DBPROCESS *dbproc, DBINT msgno, int msgstate,
        return 0;
 }
 
+void pdo_dblib_err_dtor(pdo_dblib_err *err)
+{
+       if (!err) {
+               return;
+       }
+
+       if (err->dberrstr) {
+               efree(err->dberrstr);
+               err->dberrstr = NULL;
+       }
+       if (err->lastmsg) {
+               efree(err->lastmsg);
+               err->lastmsg = NULL;
+       }
+       if (err->oserrstr) {
+               efree(err->oserrstr);
+               err->oserrstr = NULL;
+       }
+}
+
 static PHP_GINIT_FUNCTION(dblib)
 {
        memset(dblib_globals, 0, sizeof(*dblib_globals));
index 87a0038ef4cfb516a1da664eb02bbaddc6c8aec6..01c538eed7ab75a0b2c2d91dce756146b18a680d 100644 (file)
@@ -108,6 +108,8 @@ typedef struct {
        char *lastmsg;
 } pdo_dblib_err;
 
+void pdo_dblib_err_dtor(pdo_dblib_err *err);
+
 typedef struct {
        LOGINREC        *login;
        DBPROCESS       *link;