Skip to content

Commit fbf7cc7

Browse files
committed
- Fixed memory leaks
- Added new tests (Coverage++)
1 parent 61f0a0d commit fbf7cc7

5 files changed

+126
-2
lines changed

ext/pdo_sqlite/sqlite_driver.c

+5-2
Original file line numberDiff line numberDiff line change
@@ -392,8 +392,8 @@ static int do_callback(struct pdo_sqlite_fci *fc, zval *cb,
392392
}
393393

394394
/* clean up the params */
395-
if (argc) {
396-
for (i = is_agg; i < argc; i++) {
395+
if (zargs) {
396+
for (i = is_agg; i < fake_argc; i++) {
397397
zval_ptr_dtor(zargs[i]);
398398
efree(zargs[i]);
399399
}
@@ -519,6 +519,7 @@ static PHP_METHOD(SQLite, sqliteCreateFunction)
519519
MAKE_STD_ZVAL(func->func);
520520
*(func->func) = *callback;
521521
zval_copy_ctor(func->func);
522+
INIT_PZVAL(func->func);
522523

523524
func->argc = argc;
524525

@@ -592,10 +593,12 @@ static PHP_METHOD(SQLite, sqliteCreateAggregate)
592593
MAKE_STD_ZVAL(func->step);
593594
*(func->step) = *step_callback;
594595
zval_copy_ctor(func->step);
596+
INIT_PZVAL(func->step);
595597

596598
MAKE_STD_ZVAL(func->fini);
597599
*(func->fini) = *fini_callback;
598600
zval_copy_ctor(func->fini);
601+
INIT_PZVAL(func->fini);
599602

600603
func->argc = argc;
601604

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
--TEST--
2+
PDO_sqlite: Testing sqliteCreateAggregate()
3+
--FILE--
4+
<?php
5+
6+
$db = new pdo('sqlite:memory');
7+
8+
$db->query('CREATE TABLE IF NOT EXISTS foobar (id INT AUTO INCREMENT, name TEXT)');
9+
10+
$db->query('INSERT INTO foobar VALUES (NULL, "PHP")');
11+
$db->query('INSERT INTO foobar VALUES (NULL, "PHP6")');
12+
13+
$db->sqliteCreateAggregate('testing', function(&$a, $b) { $a .= $b; return $a; }, function(&$v) { return $v; });
14+
15+
16+
foreach ($db->query('SELECT testing(name) FROM foobar') as $row) {
17+
var_dump($row);
18+
}
19+
20+
$db->query('DROP TABLE foobar');
21+
22+
?>
23+
--EXPECTF--
24+
array(2) {
25+
["testing(name)"]=>
26+
%string|unicode%(2) "12"
27+
[0]=>
28+
%string|unicode%(2) "12"
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
--TEST--
2+
PDO_sqlite: Testing sqliteCreateFunction()
3+
--FILE--
4+
<?php
5+
6+
$db = new pdo('sqlite:memory');
7+
8+
$db->query('CREATE TABLE IF NOT EXISTS foobar (id INT AUTO INCREMENT, name TEXT)');
9+
10+
$db->query('INSERT INTO foobar VALUES (NULL, "PHP")');
11+
$db->query('INSERT INTO foobar VALUES (NULL, "PHP6")');
12+
13+
14+
$db->sqliteCreateFunction('testing', function($v) { return strtolower($v); });
15+
16+
17+
foreach ($db->query('SELECT testing(name) FROM foobar') as $row) {
18+
var_dump($row);
19+
}
20+
21+
$db->query('DROP TABLE foobar');
22+
23+
?>
24+
--EXPECTF--
25+
array(2) {
26+
["testing(name)"]=>
27+
%string|unicode%(3) "php"
28+
[0]=>
29+
%string|unicode%(3) "php"
30+
}
31+
array(2) {
32+
["testing(name)"]=>
33+
%string|unicode%(4) "php6"
34+
[0]=>
35+
%string|unicode%(4) "php6"
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
--TEST--
2+
PDO_sqlite: Testing lastInsertId()
3+
--FILE--
4+
<?php
5+
6+
$db = new pdo('sqlite:memory');
7+
$db->query('CREATE TABLE IF NOT EXISTS foo (id INT AUTO INCREMENT, name TEXT)');
8+
$db->query('INSERT INTO foo VALUES (NULL, "PHP")');
9+
$db->query('INSERT INTO foo VALUES (NULL, "PHP6")');
10+
var_dump($db->query('SELECT * FROM foo'));
11+
var_dump($db->errorInfo());
12+
var_dump($db->lastInsertId());
13+
14+
$db->query('DROP TABLE foo');
15+
16+
?>
17+
--EXPECTF--
18+
object(PDOStatement)#2 (1) {
19+
["queryString"]=>
20+
%string|unicode%(17) "SELECT * FROM foo"
21+
}
22+
array(3) {
23+
[0]=>
24+
%string|unicode%(5) "00000"
25+
[1]=>
26+
NULL
27+
[2]=>
28+
NULL
29+
}
30+
%string|unicode%(1) "2"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
--TEST--
2+
PDO_sqlite: Testing transaction
3+
--FILE--
4+
<?php
5+
6+
$db = new pdo('sqlite:memory');
7+
8+
$db->beginTransaction();
9+
10+
$db->query('CREATE TABLE IF NOT EXISTS foobar (id INT AUTO INCREMENT, name TEXT)');
11+
$db->commit();
12+
13+
$db->beginTransaction();
14+
$db->query('INSERT INTO foobar VALUES (NULL, "PHP")');
15+
$db->query('INSERT INTO foobar VALUES (NULL, "PHP6")');
16+
$db->rollback();
17+
18+
$r = $db->query('SELECT COUNT(*) FROM foobar');
19+
var_dump($r->rowCount());
20+
21+
22+
$db->query('DROP TABLE foobar');
23+
24+
?>
25+
--EXPECTF--
26+
int(0)

0 commit comments

Comments
 (0)