diff options
Diffstat (limited to 'ext/oci8/oci8_statement.c')
-rw-r--r-- | ext/oci8/oci8_statement.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/ext/oci8/oci8_statement.c b/ext/oci8/oci8_statement.c index 55983d3e9f..d4f08150e7 100644 --- a/ext/oci8/oci8_statement.c +++ b/ext/oci8/oci8_statement.c @@ -25,9 +25,6 @@ +----------------------------------------------------------------------+ */ -/* $Id$ */ - - #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -1178,7 +1175,8 @@ int php_oci_bind_by_name(php_oci_statement *statement, char *name, size_t name_l } else if (Z_TYPE_P(var) == IS_STRING) { value_sz = (sb4) Z_STRLEN_P(var); } else { - value_sz = PHP_OCI_PIECE_SIZE; + /* Bug-72524: revert value_sz from PHP_OCI_PIECE_SIZE to 0. This restores PHP 5.6 behavior */ + value_sz = 0; } } else { value_sz = (sb4) maxlength; @@ -1243,6 +1241,11 @@ int php_oci_bind_by_name(php_oci_statement *statement, char *name, size_t name_l bindp = zend_hash_update_ptr(statement->binds, zvtmp, bindp); zend_string_release(zvtmp); } + /* Make sure the minimum of value_sz is 1 to avoid ORA-3149 + * when both in/out parameters are bound with empty strings + */ + if (value_sz == 0) + value_sz = 1; bindp->descriptor = oci_desc; bindp->statement = oci_stmt; @@ -1507,7 +1510,7 @@ php_oci_out_column *php_oci_statement_get_column_helper(INTERNAL_FUNCTION_PARAME convert_to_long(&tmp); column = php_oci_statement_get_column(statement, Z_LVAL(tmp), NULL, 0); if (!column) { - php_error_docref(NULL, E_WARNING, "Invalid column index \"%pd\"", Z_LVAL(tmp)); + php_error_docref(NULL, E_WARNING, "Invalid column index \"" ZEND_LONG_FMT "\"", Z_LVAL(tmp)); zval_dtor(&tmp); return NULL; } @@ -1574,7 +1577,7 @@ int php_oci_bind_array_by_name(php_oci_statement *statement, char *name, size_t convert_to_array(var); if (maxlength < -1) { - php_error_docref(NULL, E_WARNING, "Invalid max length value (%pd)", maxlength); + php_error_docref(NULL, E_WARNING, "Invalid max length value (" ZEND_LONG_FMT ")", maxlength); return 1; } @@ -1605,7 +1608,7 @@ int php_oci_bind_array_by_name(php_oci_statement *statement, char *name, size_t bind = php_oci_bind_array_helper_date(var, max_table_length, statement->connection); break; default: - php_error_docref(NULL, E_WARNING, "Unknown or unsupported datatype given: %pd", type); + php_error_docref(NULL, E_WARNING, "Unknown or unsupported datatype given: " ZEND_LONG_FMT, type); return 1; break; } |