@@ -69,15 +69,6 @@ zend_result zend_startup_builtin_functions(void) /* {{{ */
6969}
7070/* }}} */ 
7171
72- static  zend_never_inline  ZEND_COLD  void  ZEND_FASTCALL  zend_wrong_clone_call (zend_function  * clone , zend_class_entry  * scope )
73- {
74- 	zend_throw_error (NULL , "Call to %s %s::__clone() from %s%s" ,
75- 		zend_visibility_string (clone -> common .fn_flags ), ZSTR_VAL (clone -> common .scope -> name ),
76- 		scope  ? "scope "  : "global scope" ,
77- 		scope  ? ZSTR_VAL (scope -> name ) : "" 
78- 	);
79- }
80- 
8172ZEND_FUNCTION (clone )
8273{
8374	zend_object  * zobj ;
@@ -92,14 +83,10 @@ ZEND_FUNCTION(clone)
9283
9384	zend_class_entry  * scope  =  zend_get_executed_scope ();
9485
95- 	zval  * obj ;
96- 	zend_class_entry  * ce ;
97- 	zend_function  * clone ;
98- 	zend_object_clone_obj_t  clone_call ;
86+ 	zend_class_entry  * ce  =  zobj -> ce ;
87+ 	zend_function  * clone  =  ce -> clone ;
88+ 	zend_object_clone_obj_t  clone_call  =  zobj -> handlers -> clone_obj ;
9989
100- 	ce  =  zobj -> ce ;
101- 	clone  =  ce -> clone ;
102- 	clone_call  =  zobj -> handlers -> clone_obj ;
10390	if  (UNEXPECTED (clone_call  ==  NULL )) {
10491		zend_throw_error (NULL , "Trying to clone an uncloneable object of class %s" , ZSTR_VAL (ce -> name ));
10592		RETURN_THROWS ();
@@ -109,19 +96,26 @@ ZEND_FUNCTION(clone)
10996		if  (clone -> common .scope  !=  scope ) {
11097			if  (UNEXPECTED (clone -> common .fn_flags  &  ZEND_ACC_PRIVATE )
11198			 ||  UNEXPECTED (!zend_check_protected (zend_get_function_root_class (clone ), scope ))) {
112- 				zend_wrong_clone_call (clone , scope );
99+ 				zend_throw_error (NULL , "Call to %s %s::__clone() from %s%s" ,
100+ 					zend_visibility_string (clone -> common .fn_flags ), ZSTR_VAL (clone -> common .scope -> name ),
101+ 					scope  ? "scope "  : "global scope" ,
102+ 					scope  ? ZSTR_VAL (scope -> name ) : "" 
103+ 				);
113104				RETURN_THROWS ();
114105			}
115106		}
116107	}
117108
118109	zend_object  * cloned  =  clone_call (zobj );
119110
120- 	for  (uint32_t  i  =  0 ; i  <  argc ; i ++ ) {
121- 		zend_string  * key  =  zend_long_to_str (i );
111+ 	if  (UNEXPECTED (argc  >  0 )) {
112+ 		for  (uint32_t  i  =  0 ; i  <  argc ; i ++ ) {
113+ 			zend_string  * key  =  zend_long_to_str (i );
122114
123- 		zend_update_property_ex (scope , cloned , key , & args [i ]);
115+ 			zend_update_property_ex (scope , cloned , key , & args [i ]);
116+ 		}
124117	}
118+ 
125119	if  (named_params  !=  NULL ) {
126120		zend_string  * key ;
127121		zval  * val ;
0 commit comments