mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
fix pdo_sqlite crash with empty bound stream
This commit is contained in:
parent
1406f80135
commit
cff9e16a12
2 changed files with 39 additions and 2 deletions
|
@ -138,11 +138,12 @@ static int pdo_sqlite_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_d
|
||||||
parameter = ¶m->parameter;
|
parameter = ¶m->parameter;
|
||||||
}
|
}
|
||||||
if (Z_TYPE_P(parameter) == IS_RESOURCE) {
|
if (Z_TYPE_P(parameter) == IS_RESOURCE) {
|
||||||
php_stream *stm;
|
php_stream *stm = NULL;
|
||||||
php_stream_from_zval_no_verify(stm, parameter);
|
php_stream_from_zval_no_verify(stm, parameter);
|
||||||
if (stm) {
|
if (stm) {
|
||||||
|
zend_string *mem = php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0);
|
||||||
zval_ptr_dtor(parameter);
|
zval_ptr_dtor(parameter);
|
||||||
ZVAL_STR(parameter, php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0));
|
ZVAL_STR(parameter, mem ? mem : STR_EMPTY_ALLOC());
|
||||||
} else {
|
} else {
|
||||||
pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource");
|
pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
36
ext/pdo_sqlite/tests/bug70862.phpt
Normal file
36
ext/pdo_sqlite/tests/bug70862.phpt
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
--TEST--
|
||||||
|
PDO_sqlite: Testing sqliteCreateCollation()
|
||||||
|
--SKIPIF--
|
||||||
|
<?php if (!extension_loaded('pdo_sqlite')) print 'skip not loaded'; ?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$db = new pdo('sqlite::memory:');
|
||||||
|
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||||
|
|
||||||
|
$db->exec('CREATE TABLE test(field BLOB)');
|
||||||
|
|
||||||
|
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
|
||||||
|
$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
|
||||||
|
|
||||||
|
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");
|
||||||
|
|
||||||
|
$stmt = $db->prepare('INSERT INTO test(field) VALUES (:para)');
|
||||||
|
$stmt->bindParam(":para", $f, PDO::PARAM_LOB);
|
||||||
|
$stmt->execute();
|
||||||
|
|
||||||
|
var_dump($f);
|
||||||
|
|
||||||
|
?>
|
||||||
|
+++DONE+++
|
||||||
|
--EXPECTF--
|
||||||
|
string(0) ""
|
||||||
|
+++DONE+++
|
Loading…
Add table
Add a link
Reference in a new issue