php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #73002
Patch oci8_statement.patch_7_4_0boolean2 revision 2019-12-16 10:52 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement.patch_7_4_0boolean revision 2019-12-16 10:17 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement.patch_7_4_0 revision 2019-11-27 10:12 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement.patch_7_3_0_RC2 revision 2018-10-01 11:57 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement.patch_7_3_0 revision 2018-06-12 15:01 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement.patch_7_1_11 revision 2017-10-29 14:53 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement.patch_7_1_8 revision 2017-08-10 13:06 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement.patch_7_1_4 revision 2017-04-28 08:33 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement.patch_7_0_13_v2 revision 2016-11-14 19:12 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement.patch_7_0_13 revision 2016-11-14 12:11 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement_v2.patch_7_0_11 revision 2016-09-16 11:13 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement.patch_7_0_11 revision 2016-09-16 10:28 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement_v2.patch revision 2016-09-08 10:22 UTC by lzsiga at freemail dot c3 dot hu
Patch oci8_statement.patch revision 2016-09-02 11:14 UTC by lzsiga at freemail dot c3 dot hu

Patch oci8_statement.patch_7_4_0boolean2 for OCI8 related Bug #73002

Patch version 2019-12-16 10:52 UTC

Return to Bug #73002 | Download this patch
This patch renders other patches obsolete

Obsolete patches:

Patch Revisions:

Developer: lzsiga@freemail.c3.hu

*** ext/oci8/oci8_statement.c	Tue Nov 26 21:13:44 2019
--- ../php-7.4.0-patched/ext/oci8/oci8_statement.c	Mon Dec 16 11:30:13 2019
***************
*** 45,50 ****
--- 45,60 ----
  typedef ub4 oci_phpsized_int;
  #endif
  
+ #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+   #define LongPtr2Int32Ptr(longptr) ((int32_t *)(longptr))
+   #define ZendLongPtr2Int32Ptr(zendlongptr) ((int32_t *)(zendlongptr))
+ #else
+   #define LongPtr2Int32Ptr(longptr) \
+     ((int32_t *)((char *)(longptr)+(sizeof(long)-sizeof(int32_t))))
+   #define ZendLongPtr2Int32Ptr(zendlongptr) \
+     ((int32_t *)((char *)(zendlongptr)+(sizeof(zend_long)-sizeof(int32_t))))
+ #endif
+ 
  /* {{{ php_oci_statement_create()
   Create statemend handle and allocate necessary resources */
  php_oci_statement *php_oci_statement_create(php_oci_connection *connection, char *query, int query_len)
***************
*** 988,1009 ****
  		}
  		zval_ptr_dtor(zv);
  		ZVAL_NULL(zv);
! 	} else if (Z_TYPE_P(zv) == IS_STRING
! 			   && Z_STRLEN_P(zv) > 0
! 			   && Z_STRVAL_P(zv)[ Z_STRLEN_P(zv) ] != '\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.
! 		 */
  #if PHP_VERSION_ID < 70300
! 		SEPARATE_STRING(zv);
! 		Z_STR_P(zv) = zend_string_extend(Z_STR_P(zv), Z_STRLEN_P(zv)+1, 0);
  #else
! 		ZVAL_NEW_STR(zv, zend_string_extend(Z_STR_P(zv), Z_STRLEN_P(zv)+1, 0));
  #endif
! 		Z_STRVAL_P(zv)[ Z_STRLEN_P(zv) ] = '\0';
  	} else if (Z_TYPE_P(zv) == IS_ARRAY) {
  		int i;
  		zval *entry = NULL;
--- 998,1021 ----
  		}
  		zval_ptr_dtor(zv);
  		ZVAL_NULL(zv);
! 	} else if (Z_TYPE_P(zv) == IS_STRING) {
! 		Z_STRLEN_P(zv)= bind->dummy_len;
! 		if (Z_STRLEN_P(zv) > 0 &&
! 		    Z_STRVAL_P(zv)[ Z_STRLEN_P(zv) ] != '\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.
! 			 */
  #if PHP_VERSION_ID < 70300
! 		    SEPARATE_STRING(zv);
! 		    Z_STR_P(zv) = zend_string_extend(Z_STR_P(zv), Z_STRLEN_P(zv)+1, 0);
  #else
! 		    ZVAL_NEW_STR(zv, zend_string_extend(Z_STR_P(zv), Z_STRLEN_P(zv)+1, 0));
  #endif
! 		    Z_STRVAL_P(zv)[ Z_STRLEN_P(zv) ] = '\0';
! 		}
  	} else if (Z_TYPE_P(zv) == IS_ARRAY) {
  		int i;
  		zval *entry = NULL;
***************
*** 1095,1101 ****
  		/* This convetrsion is done on purpose (ext/oci8 uses LVAL as a temorary value) */
  		if (Z_LVAL_P(zv) == 0)
  			ZVAL_BOOL(zv, FALSE);
! 		else if (Z_LVAL_P(zv) == 1)
  			ZVAL_BOOL(zv, TRUE);
  	}
  
--- 1107,1113 ----
  		/* This convetrsion is done on purpose (ext/oci8 uses LVAL as a temorary value) */
  		if (Z_LVAL_P(zv) == 0)
  			ZVAL_BOOL(zv, FALSE);
! 		else
  			ZVAL_BOOL(zv, TRUE);
  	}
  
***************
*** 1239,1245 ****
  				return 1;
  			}
  
! 			value_sz = sizeof(zend_long);
  
  			mode = OCI_DEFAULT;
  			break;
--- 1251,1258 ----
  				return 1;
  			}
  
! 			bind_data = ZendLongPtr2Int32Ptr (bind_data);	/* for bigendian 64-bit platform */
! 			value_sz = sizeof (int32);
  
  			mode = OCI_DEFAULT;
  			break;
***************
*** 1391,1396 ****
--- 1404,1410 ----
  		*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 */
  		if (!try_convert_to_string(val)) {
***************
*** 1408,1413 ****
--- 1422,1428 ----
  		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;
***************
*** 1501,1508 ****
  		ZVAL_STRINGL(val, NULL, Z_STRLEN(val) + 1);
  #endif
  
! 		/* XXX we assume that zend-zval len has 4 bytes */
! 		*alenpp = (ub4*) &Z_STRLEN_P(val);
  		*bufpp = Z_STRVAL_P(val);
  		*piecep = OCI_ONE_PIECE;
  		*rcodepp = &phpbind->retcode;
--- 1516,1524 ----
  		ZVAL_STRINGL(val, NULL, Z_STRLEN(val) + 1);
  #endif
  
! 		/* XXX we assume that zend-zval len has 4 bytes -- doesn't work on big endian PowerPC-64 */
!  		phpbind->dummy_len= Z_STRLEN_P(val);
! 		*alenpp = &phpbind->dummy_len;
  		*bufpp = Z_STRVAL_P(val);
  		*piecep = OCI_ONE_PIECE;
  		*rcodepp = &phpbind->retcode;
 
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Tue Feb 25 00:01:26 2020 UTC