@@ -254,6 +254,12 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(uint32_t n
254
254
return ;
255
255
}
256
256
257
+ if ((expected_type == Z_EXPECTED_PATH || expected_type == Z_EXPECTED_PATH_OR_NULL )
258
+ && Z_TYPE_P (arg ) == IS_STRING ) {
259
+ zend_argument_value_error (num , "must not contain any null bytes" );
260
+ return ;
261
+ }
262
+
257
263
zend_argument_type_error (num , "must be %s, %s given" , expected_error [expected_type ], zend_zval_type_name (arg ));
258
264
}
259
265
/* }}} */
@@ -668,10 +674,12 @@ static const char *zend_parse_arg_impl(zval *arg, va_list *va, const char **spec
668
674
char * * p = va_arg (* va , char * * );
669
675
size_t * pl = va_arg (* va , size_t * );
670
676
if (!zend_parse_arg_path (arg , p , pl , check_null )) {
671
- zend_spprintf (error , 0 , "a valid path%s, %s given" ,
672
- check_null ? " or null" : "" , zend_zval_type_name (arg )
673
- );
674
- return "" ;
677
+ if (p ) {
678
+ zend_spprintf (error , 0 , "must not contain any null bytes" );
679
+ return "" ;
680
+ } else {
681
+ return check_null ? "?string" : "string" ;
682
+ }
675
683
}
676
684
}
677
685
break ;
@@ -680,10 +688,12 @@ static const char *zend_parse_arg_impl(zval *arg, va_list *va, const char **spec
680
688
{
681
689
zend_string * * str = va_arg (* va , zend_string * * );
682
690
if (!zend_parse_arg_path_str (arg , str , check_null )) {
683
- zend_spprintf (error , 0 , "a valid path%s, %s given" ,
684
- check_null ? " or null" : "" , zend_zval_type_name (arg )
685
- );
686
- return "" ;
691
+ if (str ) {
692
+ zend_spprintf (error , 0 , "must not contain any null bytes" );
693
+ return "" ;
694
+ } else {
695
+ return check_null ? "?string" : "string" ;
696
+ }
687
697
}
688
698
}
689
699
break ;
@@ -762,7 +772,7 @@ static const char *zend_parse_arg_impl(zval *arg, va_list *va, const char **spec
762
772
if (!zend_parse_arg_object (arg , p , ce , check_null )) {
763
773
if (ce ) {
764
774
if (check_null ) {
765
- zend_spprintf (error , 0 , "of type ?%s, %s given" , ZSTR_VAL (ce -> name ), zend_zval_type_name (arg ));
775
+ zend_spprintf (error , 0 , "must be of type ?%s, %s given" , ZSTR_VAL (ce -> name ), zend_zval_type_name (arg ));
766
776
return "" ;
767
777
} else {
768
778
return ZSTR_VAL (ce -> name );
@@ -795,14 +805,14 @@ static const char *zend_parse_arg_impl(zval *arg, va_list *va, const char **spec
795
805
}
796
806
if (ce_base ) {
797
807
if ((!* pce || !instanceof_function (* pce , ce_base ))) {
798
- zend_spprintf (error , 0 , "a class name derived from %s%s, %s given" ,
808
+ zend_spprintf (error , 0 , "must be a class name derived from %s%s, %s given" ,
799
809
ZSTR_VAL (ce_base -> name ), check_null ? " or null" : "" , Z_STRVAL_P (arg ));
800
810
* pce = NULL ;
801
811
return "" ;
802
812
}
803
813
}
804
814
if (!* pce ) {
805
- zend_spprintf (error , 0 , "a valid class name%s, %s given" ,
815
+ zend_spprintf (error , 0 , "must be a valid class name%s, %s given" ,
806
816
check_null ? " or null" : "" , Z_STRVAL_P (arg ));
807
817
return "" ;
808
818
}
@@ -833,7 +843,7 @@ static const char *zend_parse_arg_impl(zval *arg, va_list *va, const char **spec
833
843
}
834
844
835
845
if (is_callable_error ) {
836
- zend_spprintf (error , 0 , "a valid callback%s, %s" , check_null ? " or null" : "" , is_callable_error );
846
+ zend_spprintf (error , 0 , "must be a valid callback%s, %s" , check_null ? " or null" : "" , is_callable_error );
837
847
efree (is_callable_error );
838
848
return "" ;
839
849
} else {
@@ -874,7 +884,11 @@ static zend_result zend_parse_arg(uint32_t arg_num, zval *arg, va_list *va, cons
874
884
}
875
885
if (!(flags & ZEND_PARSE_PARAMS_QUIET ) && (* expected_type || error )) {
876
886
if (error ) {
877
- zend_argument_type_error (arg_num , "must be %s" , error );
887
+ if (strcmp (error , "must not contain any null bytes" ) == 0 ) {
888
+ zend_argument_value_error (arg_num , "%s" , error );
889
+ } else {
890
+ zend_argument_type_error (arg_num , "%s" , error );
891
+ }
878
892
efree (error );
879
893
} else {
880
894
zend_argument_type_error (arg_num , "must be of type %s, %s given" , expected_type , zend_zval_type_name (arg ));
0 commit comments