cvs: ZendEngine2 / zend_vm_def.h

[email protected] ("Arnaud Le Blanc") Fri, 24 Apr 2009 15:47:20 -0000
Newsgroups php.zend-engine.cvs
Message-ID <cvslbarnaud1240588040@cvsserver>
lbarnaud		Fri Apr 24 15:47:20 2009 UTC

  Modified files:              
    /ZendEngine2	zend_vm_def.h 
  Log:
  Fix handling of unicode string offsets (tests/strings/bug22592.phpt)
  
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.263&r2=1.264&diff_format=u
Index: ZendEngine2/zend_vm_def.h
diff -u ZendEngine2/zend_vm_def.h:1.263 ZendEngine2/zend_vm_def.h:1.264
--- ZendEngine2/zend_vm_def.h:1.263	Wed Apr  8 13:19:53 2009
+++ ZendEngine2/zend_vm_def.h	Fri Apr 24 15:47:20 2009
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_vm_def.h,v 1.263 2009/04/08 13:19:53 dmitry Exp $ */
+/* $Id: zend_vm_def.h,v 1.264 2009/04/24 15:47:20 lbarnaud Exp $ */
 
 /* If you change this file, please regenerate the zend_vm_execute.h and
  * zend_vm_opcodes.h files by running:
@@ -1574,7 +1574,11 @@
 					EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
 					ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
 					INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
-					ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+					if (Z_TYPE_P(EX_T(op_data->op2.u.var).str_offset.str) == IS_STRING) {
+						ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+					} else {
+						ZVAL_UNICODEL(EX_T(opline->result.u.var).var.ptr, Z_USTRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+					}
 				}
 			} else if (!RETURN_VALUE_UNUSED(&opline->result)) {
 				AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
@@ -1609,7 +1613,11 @@
 				EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
 				ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
 				INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
-				ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(opline->op1.u.var).str_offset.str)+EX_T(opline->op1.u.var).str_offset.offset, 1, 1);
+				if (Z_TYPE_P(EX_T(opline->op1.u.var).str_offset.str) == IS_STRING) {
+					ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(opline->op1.u.var).str_offset.str)+EX_T(opline->op1.u.var).str_offset.offset, 1, 1);
+				} else {
+					ZVAL_UNICODEL(EX_T(opline->result.u.var).var.ptr, Z_USTRVAL_P(EX_T(opline->op1.u.var).str_offset.str)+EX_T(opline->op1.u.var).str_offset.offset, 1, 1);
+				}
 			}
 		} else if (!RETURN_VALUE_UNUSED(&opline->result)) {
 			AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));