@@ -1675,9 +1675,8 @@ PHP_FUNCTION(array_search)
16751675}
16761676/* }}} */
16771677
1678- static zend_always_inline int php_valid_var_name (const char * var_name , size_t var_name_len ) /* {{{ */
1678+ static zend_always_inline bool php_valid_var_name (const zend_string * var_name ) /* {{{ */
16791679{
1680- #if 1
16811680 /* first 256 bits for first character, and second 256 bits for the next */
16821681 static const uint32_t charset [8 ] = {
16831682 /* 31 0 63 32 95 64 127 96 */
@@ -1687,48 +1686,28 @@ static zend_always_inline int php_valid_var_name(const char *var_name, size_t va
16871686 /* 31 0 63 32 95 64 127 96 */
16881687 0x00000000 , 0x03ff0000 , 0x87fffffe , 0x07fffffe ,
16891688 0xffffffff , 0xffffffff , 0xffffffff , 0xffffffff };
1690- #endif
1691- size_t i ;
1692- uint32_t ch ;
16931689
1694- if (UNEXPECTED (!var_name_len )) {
1695- return 0 ;
1690+ if (UNEXPECTED (!ZSTR_LEN ( var_name ) )) {
1691+ return false ;
16961692 }
16971693
16981694 /* These are allowed as first char: [a-zA-Z_\x7f-\xff] */
1699- ch = (uint32_t )((unsigned char * )var_name )[0 ];
1700- #if 1
1695+ uint32_t ch = (uint32_t )((unsigned char * )ZSTR_VAL (var_name ))[0 ];
17011696 if (UNEXPECTED (!ZEND_BIT_TEST (charset , ch ))) {
1702- #else
1703- if (var_name [0 ] != '_' &&
1704- (ch < 65 /* A */ || /* Z */ ch > 90 ) &&
1705- (ch < 97 /* a */ || /* z */ ch > 122 ) &&
1706- (ch < 127 /* 0x7f */ || /* 0xff */ ch > 255 )
1707- ) {
1708- #endif
1709- return 0 ;
1697+ return false;
17101698 }
17111699
17121700 /* And these as the rest: [a-zA-Z0-9_\x7f-\xff] */
1713- if (var_name_len > 1 ) {
1714- i = 1 ;
1701+ if (ZSTR_LEN ( var_name ) > 1 ) {
1702+ size_t i = 1 ;
17151703 do {
1716- ch = (uint32_t )((unsigned char * )var_name )[i ];
1717- #if 1
1704+ ch = (uint32_t )((unsigned char * )ZSTR_VAL (var_name ))[i ];
17181705 if (UNEXPECTED (!ZEND_BIT_TEST (charset2 , ch ))) {
1719- #else
1720- if (var_name [i ] != '_' &&
1721- (ch < 48 /* 0 */ || /* 9 */ ch > 57 ) &&
1722- (ch < 65 /* A */ || /* Z */ ch > 90 ) &&
1723- (ch < 97 /* a */ || /* z */ ch > 122 ) &&
1724- (ch < 127 /* 0x7f */ || /* 0xff */ ch > 255 )
1725- ) {
1726- #endif
1727- return 0 ;
1706+ return false;
17281707 }
1729- } while (++ i < var_name_len );
1708+ } while (++ i < ZSTR_LEN ( var_name ) );
17301709 }
1731- return 1 ;
1710+ return true ;
17321711}
17331712/* }}} */
17341713
@@ -1768,7 +1747,7 @@ static zend_long php_extract_ref_if_exists(zend_array *arr, zend_array *symbol_t
17681747 continue ;
17691748 }
17701749 }
1771- if (!php_valid_var_name (ZSTR_VAL ( var_name ), ZSTR_LEN ( var_name ) )) {
1750+ if (!php_valid_var_name (var_name )) {
17721751 continue ;
17731752 }
17741753 if (zend_string_equals_literal (var_name , "GLOBALS" )) {
@@ -1814,7 +1793,7 @@ static zend_long php_extract_if_exists(zend_array *arr, zend_array *symbol_table
18141793 continue ;
18151794 }
18161795 }
1817- if (!php_valid_var_name (ZSTR_VAL ( var_name ), ZSTR_LEN ( var_name ) )) {
1796+ if (!php_valid_var_name (var_name )) {
18181797 continue ;
18191798 }
18201799 if (zend_string_equals_literal (var_name , "GLOBALS" )) {
@@ -1850,7 +1829,7 @@ static zend_long php_extract_ref_overwrite(zend_array *arr, zend_array *symbol_t
18501829 if (!var_name ) {
18511830 continue ;
18521831 }
1853- if (!php_valid_var_name (ZSTR_VAL ( var_name ), ZSTR_LEN ( var_name ) )) {
1832+ if (!php_valid_var_name (var_name )) {
18541833 continue ;
18551834 }
18561835 if (zend_string_equals (var_name , ZSTR_KNOWN (ZEND_STR_THIS ))) {
@@ -1902,7 +1881,7 @@ static zend_long php_extract_overwrite(zend_array *arr, zend_array *symbol_table
19021881 if (!var_name ) {
19031882 continue ;
19041883 }
1905- if (!php_valid_var_name (ZSTR_VAL ( var_name ), ZSTR_LEN ( var_name ) )) {
1884+ if (!php_valid_var_name (var_name )) {
19061885 continue ;
19071886 }
19081887 if (zend_string_equals (var_name , ZSTR_KNOWN (ZEND_STR_THIS ))) {
@@ -1963,7 +1942,7 @@ static zend_long php_extract_ref_prefix_if_exists(zend_array *arr, zend_array *s
19631942 }
19641943 }
19651944 php_prefix_varname (& final_name , prefix , ZSTR_VAL (var_name ), ZSTR_LEN (var_name ), true);
1966- if (php_valid_var_name (Z_STRVAL ( final_name ), Z_STRLEN (final_name ))) {
1945+ if (php_valid_var_name (Z_STR (final_name ))) {
19671946 if (zend_string_equals (Z_STR (final_name ), ZSTR_KNOWN (ZEND_STR_THIS ))) {
19681947 zend_throw_error (NULL , "Cannot re-assign $this" );
19691948 return -1 ;
@@ -2017,7 +1996,7 @@ static zend_long php_extract_prefix_if_exists(zend_array *arr, zend_array *symbo
20171996 }
20181997 }
20191998 php_prefix_varname (& final_name , prefix , ZSTR_VAL (var_name ), ZSTR_LEN (var_name ), true);
2020- if (php_valid_var_name (Z_STRVAL ( final_name ), Z_STRLEN (final_name ))) {
1999+ if (php_valid_var_name (Z_STR (final_name ))) {
20212000 if (zend_string_equals (Z_STR (final_name ), ZSTR_KNOWN (ZEND_STR_THIS ))) {
20222001 zend_throw_error (NULL , "Cannot re-assign $this" );
20232002 return -1 ;
@@ -2080,7 +2059,7 @@ static zend_long php_extract_ref_prefix_same(zend_array *arr, zend_array *symbol
20802059 }
20812060prefix :
20822061 php_prefix_varname (& final_name , prefix , ZSTR_VAL (var_name ), ZSTR_LEN (var_name ), true);
2083- if (php_valid_var_name (Z_STRVAL ( final_name ), Z_STRLEN (final_name ))) {
2062+ if (php_valid_var_name (Z_STR (final_name ))) {
20842063 if (zend_string_equals (Z_STR (final_name ), ZSTR_KNOWN (ZEND_STR_THIS ))) {
20852064 zend_throw_error (NULL , "Cannot re-assign $this" );
20862065 return -1 ;
@@ -2104,7 +2083,7 @@ static zend_long php_extract_ref_prefix_same(zend_array *arr, zend_array *symbol
21042083 }
21052084 zval_ptr_dtor_str (& final_name );
21062085 } else {
2107- if (!php_valid_var_name (ZSTR_VAL ( var_name ), ZSTR_LEN ( var_name ) )) {
2086+ if (!php_valid_var_name (var_name )) {
21082087 continue ;
21092088 }
21102089 if (zend_string_equals (var_name , ZSTR_KNOWN (ZEND_STR_THIS ))) {
@@ -2152,7 +2131,7 @@ static zend_long php_extract_prefix_same(zend_array *arr, zend_array *symbol_tab
21522131 }
21532132prefix :
21542133 php_prefix_varname (& final_name , prefix , ZSTR_VAL (var_name ), ZSTR_LEN (var_name ), true);
2155- if (php_valid_var_name (Z_STRVAL ( final_name ), Z_STRLEN (final_name ))) {
2134+ if (php_valid_var_name (Z_STR (final_name ))) {
21562135 if (zend_string_equals (Z_STR (final_name ), ZSTR_KNOWN (ZEND_STR_THIS ))) {
21572136 zend_throw_error (NULL , "Cannot re-assign $this" );
21582137 return -1 ;
@@ -2176,7 +2155,7 @@ static zend_long php_extract_prefix_same(zend_array *arr, zend_array *symbol_tab
21762155 }
21772156 zval_ptr_dtor_str (& final_name );
21782157 } else {
2179- if (!php_valid_var_name (ZSTR_VAL ( var_name ), ZSTR_LEN ( var_name ) )) {
2158+ if (!php_valid_var_name (var_name )) {
21802159 continue ;
21812160 }
21822161 if (zend_string_equals (var_name , ZSTR_KNOWN (ZEND_STR_THIS ))) {
@@ -2211,7 +2190,7 @@ static zend_long php_extract_ref_prefix_all(zend_array *arr, zend_array *symbol_
22112190 php_prefix_varname (& final_name , prefix , ZSTR_VAL (str ), ZSTR_LEN (str ), true);
22122191 zend_string_release_ex (str , 0 );
22132192 }
2214- if (php_valid_var_name (Z_STRVAL ( final_name ), Z_STRLEN (final_name ))) {
2193+ if (php_valid_var_name (Z_STR (final_name ))) {
22152194 if (zend_string_equals (Z_STR (final_name ), ZSTR_KNOWN (ZEND_STR_THIS ))) {
22162195 zend_throw_error (NULL , "Cannot re-assign $this" );
22172196 return -1 ;
@@ -2258,7 +2237,7 @@ static zend_long php_extract_prefix_all(zend_array *arr, zend_array *symbol_tabl
22582237 php_prefix_varname (& final_name , prefix , ZSTR_VAL (str ), ZSTR_LEN (str ), true);
22592238 zend_string_release_ex (str , 0 );
22602239 }
2261- if (php_valid_var_name (Z_STRVAL ( final_name ), Z_STRLEN (final_name ))) {
2240+ if (php_valid_var_name (Z_STR (final_name ))) {
22622241 if (zend_string_equals (Z_STR (final_name ), ZSTR_KNOWN (ZEND_STR_THIS ))) {
22632242 zend_throw_error (NULL , "Cannot re-assign $this" );
22642243 return -1 ;
@@ -2296,10 +2275,10 @@ static zend_long php_extract_ref_prefix_invalid(zend_array *arr, zend_array *sym
22962275
22972276 ZEND_HASH_FOREACH_KEY_VAL (arr , num_key , var_name , entry ) {
22982277 if (var_name ) {
2299- if (!php_valid_var_name (ZSTR_VAL ( var_name ), ZSTR_LEN ( var_name ) )
2278+ if (!php_valid_var_name (var_name )
23002279 || zend_string_equals (var_name , ZSTR_KNOWN (ZEND_STR_THIS ))) {
23012280 php_prefix_varname (& final_name , prefix , ZSTR_VAL (var_name ), ZSTR_LEN (var_name ), true);
2302- if (!php_valid_var_name (Z_STRVAL ( final_name ), Z_STRLEN (final_name ))) {
2281+ if (!php_valid_var_name (Z_STR (final_name ))) {
23032282 zval_ptr_dtor_str (& final_name );
23042283 continue ;
23052284 }
@@ -2310,7 +2289,7 @@ static zend_long php_extract_ref_prefix_invalid(zend_array *arr, zend_array *sym
23102289 zend_string * str = zend_long_to_str (num_key );
23112290 php_prefix_varname (& final_name , prefix , ZSTR_VAL (str ), ZSTR_LEN (str ), true);
23122291 zend_string_release_ex (str , 0 );
2313- if (!php_valid_var_name (Z_STRVAL ( final_name ), Z_STRLEN (final_name ))) {
2292+ if (!php_valid_var_name (Z_STR (final_name ))) {
23142293 zval_ptr_dtor_str (& final_name );
23152294 continue ;
23162295 }
@@ -2351,10 +2330,10 @@ static zend_long php_extract_prefix_invalid(zend_array *arr, zend_array *symbol_
23512330
23522331 ZEND_HASH_FOREACH_KEY_VAL (arr , num_key , var_name , entry ) {
23532332 if (var_name ) {
2354- if (!php_valid_var_name (ZSTR_VAL ( var_name ), ZSTR_LEN ( var_name ) )
2333+ if (!php_valid_var_name (var_name )
23552334 || zend_string_equals (var_name , ZSTR_KNOWN (ZEND_STR_THIS ))) {
23562335 php_prefix_varname (& final_name , prefix , ZSTR_VAL (var_name ), ZSTR_LEN (var_name ), true);
2357- if (!php_valid_var_name (Z_STRVAL ( final_name ), Z_STRLEN (final_name ))) {
2336+ if (!php_valid_var_name (Z_STR (final_name ))) {
23582337 zval_ptr_dtor_str (& final_name );
23592338 continue ;
23602339 }
@@ -2365,7 +2344,7 @@ static zend_long php_extract_prefix_invalid(zend_array *arr, zend_array *symbol_
23652344 zend_string * str = zend_long_to_str (num_key );
23662345 php_prefix_varname (& final_name , prefix , ZSTR_VAL (str ), ZSTR_LEN (str ), true);
23672346 zend_string_release_ex (str , 0 );
2368- if (!php_valid_var_name (Z_STRVAL ( final_name ), Z_STRLEN (final_name ))) {
2347+ if (!php_valid_var_name (Z_STR (final_name ))) {
23692348 zval_ptr_dtor_str (& final_name );
23702349 continue ;
23712350 }
@@ -2410,7 +2389,7 @@ static zend_long php_extract_ref_skip(zend_array *arr, zend_array *symbol_table)
24102389 if (!var_name ) {
24112390 continue ;
24122391 }
2413- if (!php_valid_var_name (ZSTR_VAL ( var_name ), ZSTR_LEN ( var_name ) )) {
2392+ if (!php_valid_var_name (var_name )) {
24142393 continue ;
24152394 }
24162395 if (zend_string_equals (var_name , ZSTR_KNOWN (ZEND_STR_THIS ))) {
@@ -2458,7 +2437,7 @@ static zend_long php_extract_skip(zend_array *arr, zend_array *symbol_table) /*
24582437 if (!var_name ) {
24592438 continue ;
24602439 }
2461- if (!php_valid_var_name (ZSTR_VAL ( var_name ), ZSTR_LEN ( var_name ) )) {
2440+ if (!php_valid_var_name (var_name )) {
24622441 continue ;
24632442 }
24642443 if (zend_string_equals (var_name , ZSTR_KNOWN (ZEND_STR_THIS ))) {
@@ -2519,7 +2498,7 @@ PHP_FUNCTION(extract)
25192498 }
25202499
25212500 if (prefix ) {
2522- if (ZSTR_LEN (prefix ) && !php_valid_var_name (ZSTR_VAL ( prefix ), ZSTR_LEN ( prefix ) )) {
2501+ if (ZSTR_LEN (prefix ) && !php_valid_var_name (prefix )) {
25232502 zend_argument_value_error (3 , "must be a valid identifier" );
25242503 RETURN_THROWS ();
25252504 }
0 commit comments