|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
Patch oci8_statement_v2.patch_7_0_11 for OCI8 related Bug #73002Patch version 2016-09-16 11:13 UTC Return to Bug #73002 | Download this patchThis patch is obsolete Obsoleted by patches:
This patch renders other patches obsolete Obsolete patches: Patch Revisions:Developer: lzsiga@freemail.c3.hu
--- oci8_statement.oldc 2016-09-13 20:52:30.000000000 +0200
+++ oci8_statement.c 2016-09-16 12:42:28.189461267 +0200
@@ -972,17 +972,19 @@
}
zval_dtor(val);
ZVAL_NULL(val);
- } else if (Z_TYPE_P(bind->zval) == IS_STRING
- && Z_STRLEN_P(bind->zval) > 0
- && Z_STRVAL_P(bind->zval)[ Z_STRLEN_P(bind->zval) ] != '\0') {
- /* The post- PHP 5.3 feature for "interned" strings disallows
- * their reallocation but (i) any IN binds either interned or
- * not should already be null terminated and (ii) for OUT
- * binds, php_oci_bind_out_callback() should have allocated a
- * new string that we can modify here.
- */
- Z_STR_P(bind->zval) = zend_string_extend(Z_STR_P(bind->zval), Z_STRLEN_P(bind->zval)+1, 0);
- Z_STRVAL_P(bind->zval)[ Z_STRLEN_P(bind->zval) ] = '\0';
+ } else if (Z_TYPE_P(bind->zval) == IS_STRING) {
+ Z_STRLEN_P(bind->zval)= bind->dummy_len;
+ if (Z_STRLEN_P(bind->zval) > 0 &&
+ Z_STRVAL_P(bind->zval)[ Z_STRLEN_P(bind->zval) ] != '\0') {
+ /* The post- PHP 5.3 feature for "interned" strings disallows
+ * their reallocation but (i) any IN binds either interned or
+ * not should already be null terminated and (ii) for OUT
+ * binds, php_oci_bind_out_callback() should have allocated a
+ * new string that we can modify here.
+ */
+ Z_STR_P(bind->zval) = zend_string_extend(Z_STR_P(bind->zval), Z_STRLEN_P(bind->zval)+1, 0);
+ Z_STRVAL_P(bind->zval)[ Z_STRLEN_P(bind->zval) ] = '\0';
+ }
} else if (Z_TYPE_P(bind->zval) == IS_ARRAY) {
int i;
zval *entry = NULL;
@@ -1355,6 +1357,7 @@
*bufpp = 0;
*alenp = -1;
*indpp = (dvoid *)&phpbind->indicator;
+ phpbind->dummy_len= 0; /* so far, 'dummy_len' meant the maximum length; from now, it is the actual length */
} else if ((phpbind->descriptor == 0) && (phpbind->statement == 0)) {
/* "normal string bind */
convert_to_string(val);
@@ -1370,6 +1373,7 @@
if ((phpbind->dummy_len > 0) && (phpbind->dummy_len < *alenp))
*alenp = phpbind->dummy_len;
*indpp = (dvoid *)&phpbind->indicator;
+ phpbind->dummy_len= *alenp; /* so far, 'dummy_len' meant the maximum length; from now, it is the actual length */
} else if (phpbind->statement != 0) {
/* RSET */
*bufpp = phpbind->statement;
@@ -1461,8 +1465,9 @@
ZVAL_STRINGL(val, NULL, Z_STRLEN(phpbind->zval) + 1);
#endif
- /* XXX we assume that zend-zval len has 4 bytes */
- *alenpp = (ub4*) &Z_STRLEN_P(phpbind->zval);
+ /* XXX we assume that zend-zval len has 4 bytes -- doesn't work on big endian PowerPC-64 */
+ phpbind->dummy_len= Z_STRLEN_P(phpbind->zval);
+ *alenpp = &phpbind->dummy_len;
*bufpp = Z_STRVAL_P(phpbind->zval);
*piecep = OCI_ONE_PIECE;
*rcodepp = &phpbind->retcode;
|
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 16:00:02 2025 UTC |