com php-src: Fix a memory leak in sqlite3_do_callback. : NEWS ext/sqlite3/sqlite3.c
| From: | Adam Harvey | Date: | Thu, 24 Sep 2015 12:16:45 +0000 |
| Subject: | com php-src: Fix a memory leak in sqlite3_do_callback. : NEWS ext/sqlite3/sqlite3.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-89156@lists.php.net to get a copy of this message | ||
Commit: 6413ecb4390d6b0f5e452a5d8f72f847fb04fa04
Author: Adam Harvey <aharvey@php.net> Thu, 24 Sep 2015 14:16:45 +0200
Parents: 2d55e8c186ef1034c2af64478da8f23dbeb28be9
Branches: PHP-7.0 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=6413ecb4390d6b0f5e452a5d8f72f847fb04fa04
Log:
Fix a memory leak in sqlite3_do_callback.
This was very, very obvious when using a debug build of PHP to build the
manual!
Fixes bug #70571 (Memory leak in sqlite3_do_callback).
Bugs:
https://bugs.php.net/70571
Changed paths:
M NEWS
M ext/sqlite3/sqlite3.c
Diff:
diff --git a/NEWS b/NEWS
index 41ef2ba..92230ea 100644
--- a/NEWS
+++ b/NEWS
@@ -40,6 +40,9 @@ PHP NEWS
. Fixed bug #70529 (Session read causes "String is not zero-terminated" error).
(Yasuo)
+- SQLite3:
+ . Fixed bug #70571 (Memory leak in sqlite3_do_callback). (Adam)
+
- XMLRPC
. Fixed bug #70526 (xmlrpc_set_type returns false on success). (Laruence)
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c
index 16d37ae..cc9c5f5 100644
--- a/ext/sqlite3/sqlite3.c
+++ b/ext/sqlite3/sqlite3.c
@@ -714,7 +714,7 @@ static int sqlite3_do_callback(struct php_sqlite3_fci *fc, zval *cb, int argc, s
if (Z_ISUNDEF(agg_context->zval_context)) {
ZVAL_NULL(&agg_context->zval_context);
}
- ZVAL_COPY_VALUE(&zargs[0], &agg_context->zval_context);
+ ZVAL_DUP(&zargs[0], &agg_context->zval_context);
ZVAL_LONG(&zargs[1], agg_context->row_count);
}
@@ -750,6 +750,10 @@ static int sqlite3_do_callback(struct php_sqlite3_fci *fc, zval *cb, int argc,
s
php_error_docref(NULL, E_WARNING, "An error occurred while invoking the callback");
}
+ if (is_agg) {
+ zval_ptr_dtor(&zargs[0]);
+ }
+
/* clean up the params */
if (fake_argc) {
for (i = is_agg; i < argc + is_agg; i++) {