com php-src: fix crash in sqlite when executing with bound stream param: ext/sqlite3/sqlite3.c ext/sqlite3/tests/sqlite3_blob_bi nd_resource.phpt

From: Date: Thu, 05 Nov 2015 17:08:08 +0000
Subject: com php-src: fix crash in sqlite when executing with bound stream param: ext/sqlite3/sqlite3.c ext/sqlite3/tests/sqlite3_blob_bi nd_resource.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-89599@lists.php.net to get a copy of this message
Commit: 5ac288bcc6b8858e3ea509d92426b2bacc7fd397 Author: Anatol Belski <ab@php.net> Thu, 5 Nov 2015 18:08:08 +0100 Parents: 9385eb6ff8f85d0ab2bae96f02197fe7fc70d85c Branches: PHP-7.0 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=5ac288bcc6b8858e3ea509d92426b2bacc7fd397 Log: fix crash in sqlite when executing with bound stream param rel #70862 Bugs: https://bugs.php.net/70862 Changed paths: M ext/sqlite3/sqlite3.c A ext/sqlite3/tests/sqlite3_blob_bind_resource.phpt Diff: diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c index 12340f9..4e3cc28 100644 --- a/ext/sqlite3/sqlite3.c +++ b/ext/sqlite3/sqlite3.c @@ -1527,7 +1527,7 @@ PHP_METHOD(sqlite3stmt, execute) case SQLITE_BLOB: { php_stream *stream = NULL; - zend_string *buffer; + zend_string *buffer = NULL; if (Z_TYPE_P(parameter) == IS_RESOURCE) { php_stream_from_zval_no_verify(stream, parameter); if (stream == NULL) { @@ -1540,10 +1540,11 @@ PHP_METHOD(sqlite3stmt, execute) buffer = Z_STR_P(parameter); } - sqlite3_bind_blob(stmt_obj->stmt, param->param_number, ZSTR_VAL(buffer), ZSTR_LEN(buffer), SQLITE_TRANSIENT); - - if (stream) { + if (buffer) { + sqlite3_bind_blob(stmt_obj->stmt, param->param_number, ZSTR_VAL(buffer), ZSTR_LEN(buffer), SQLITE_TRANSIENT); zend_string_release(buffer); + } else { + sqlite3_bind_null(stmt_obj->stmt, param->param_number); } break; } diff --git a/ext/sqlite3/tests/sqlite3_blob_bind_resource.phpt b/ext/sqlite3/tests/sqlite3_blob_bind_resource.phpt new file mode 100644 index 0000000..108956b --- /dev/null +++ b/ext/sqlite3/tests/sqlite3_blob_bind_resource.phpt @@ -0,0 +1,39 @@ +--TEST-- +SQLite3::execute() with a resource bound for blob param +--SKIPIF-- +<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?> +--FILE-- +<?php + +require_once(dirname(__FILE__) . '/new_db.inc'); +require_once(dirname(__FILE__) . '/stream_test.inc'); + +var_dump($db->exec('CREATE TABLE test (id STRING, data BLOB)')); +$insert_stmt = $db->prepare("INSERT INTO test (id, data) VALUES (1, ?)"); + + +class HelloWrapper { + public function stream_open() { return true; } + public function stream_eof() { return true; } + public function stream_read() { return NULL; } + public function stream_stat() { return array(); } +} +stream_wrapper_register("hello", "HelloWrapper"); + +$f = fopen("hello://there", "r"); + +var_dump($insert_stmt->bindParam(1, $f, SQLITE3_BLOB)); +var_dump($insert_stmt->execute()); + +var_dump($insert_stmt->close()); +fclose($f); + +?> ++++DONE+++ +--EXPECTF-- +bool(true) +bool(true) +object(SQLite3Result)#%d (%d) { +} +bool(true) ++++DONE+++

« previous php.cvs (#89599) next »