Commit f0ed2c5890c for php.net
commit f0ed2c5890cc0c955c7a4ef99ba77ecd69584459
Author: Weilin Du <weilindu@php.net>
Date: Tue Sep 15 15:50:38 2026 +0800
ext/standard: Avoid redundant hash checks in getopt()
Repeated option values accumulate in private arrays that are only appended
to. New option keys are inserted after a failed lookup. Use known-new
insertion helpers for both cases.
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 3438d603752..1e00661cac2 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -1078,9 +1078,9 @@ PHP_FUNCTION(getopt)
if (Z_TYPE_P(args) != IS_ARRAY) {
convert_to_array(args);
}
- zend_hash_next_index_insert(Z_ARRVAL_P(args), &val);
+ zend_hash_next_index_insert_new(Z_ARRVAL_P(args), &val);
} else {
- zend_hash_index_update(Z_ARRVAL_P(return_value), opt_name_as_long, &val);
+ zend_hash_index_add_new(Z_ARRVAL_P(return_value), opt_name_as_long, &val);
}
} else {
/* other strings */
@@ -1088,9 +1088,9 @@ PHP_FUNCTION(getopt)
if (Z_TYPE_P(args) != IS_ARRAY) {
convert_to_array(args);
}
- zend_hash_next_index_insert(Z_ARRVAL_P(args), &val);
+ zend_hash_next_index_insert_new(Z_ARRVAL_P(args), &val);
} else {
- zend_hash_str_add(Z_ARRVAL_P(return_value), optname, optname_len, &val);
+ zend_hash_str_add_new(Z_ARRVAL_P(return_value), optname, optname_len, &val);
}
}