@@ -802,8 +802,10 @@ static inline zend_result ct_eval_array_key_exists(zval *result, zval *op1, zval
802
802
static bool can_ct_eval_func_call (zend_string * name , uint32_t num_args , zval * * args ) {
803
803
/* Functions in this list must always produce the same result for the same arguments,
804
804
* and have no dependence on global state (such as locales). It is okay if they throw
805
- * or warn on invalid arguments, as we detect this and will discard the evaluation result. */
805
+ * or warn on invalid arguments, as we detect this and will discard the evaluation result.
806
+ * In PHP 8.2, many functions stopped depending on locales due to https://wiki.php.net/rfc/strtolower-ascii */
806
807
if (false
808
+ || zend_string_equals_literal (name , "array_change_key_case" )
807
809
|| zend_string_equals_literal (name , "array_diff" )
808
810
|| zend_string_equals_literal (name , "array_diff_assoc" )
809
811
|| zend_string_equals_literal (name , "array_diff_key" )
@@ -824,6 +826,7 @@ static bool can_ct_eval_func_call(zend_string *name, uint32_t num_args, zval **a
824
826
|| zend_string_equals_literal (name , "dirname" )
825
827
#endif
826
828
|| zend_string_equals_literal (name , "explode" )
829
+ || zend_string_equals_literal (name , "lcfirst" )
827
830
|| zend_string_equals_literal (name , "imagetypes" )
828
831
|| zend_string_equals_literal (name , "in_array" )
829
832
|| zend_string_equals_literal (name , "implode" )
@@ -839,13 +842,21 @@ static bool can_ct_eval_func_call(zend_string *name, uint32_t num_args, zval **a
839
842
|| zend_string_equals_literal (name , "serialize" )
840
843
|| zend_string_equals_literal (name , "str_contains" )
841
844
|| zend_string_equals_literal (name , "str_ends_with" )
845
+ || zend_string_equals_literal (name , "stripos" )
846
+ || zend_string_equals_literal (name , "str_ireplace" )
847
+ || zend_string_equals_literal (name , "stristr" )
842
848
|| zend_string_equals_literal (name , "str_replace" )
843
849
|| zend_string_equals_literal (name , "str_split" )
844
850
|| zend_string_equals_literal (name , "str_starts_with" )
851
+ || zend_string_equals_literal (name , "strtolower" )
852
+ || zend_string_equals_literal (name , "strtoupper" )
845
853
|| zend_string_equals_literal (name , "strpos" )
846
854
|| zend_string_equals_literal (name , "strstr" )
847
855
|| zend_string_equals_literal (name , "substr" )
848
856
|| zend_string_equals_literal (name , "trim" )
857
+ || zend_string_equals_literal (name , "ucfirst" )
858
+ || zend_string_equals_literal (name , "ucfirst" )
859
+ || zend_string_equals_literal (name , "ucwords" )
849
860
|| zend_string_equals_literal (name , "urldecode" )
850
861
|| zend_string_equals_literal (name , "urlencode" )
851
862
|| zend_string_equals_literal (name , "version_compare" )
0 commit comments