@@ -531,8 +531,6 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
531
531
char * error , * arch , * entry2 ;
532
532
size_t arch_len , entry_len ;
533
533
php_url * resource = NULL ;
534
- zend_string * str_key ;
535
- zend_ulong unused ;
536
534
537
535
/* pre-readonly check, we need to know if this is a data phar */
538
536
if (FAILURE == phar_split_fname (url , strlen (url ), & arch , & arch_len , & entry2 , & entry_len , 2 , 2 )) {
@@ -592,13 +590,13 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
592
590
}
593
591
594
592
if (!entry -> is_deleted ) {
595
- for ( zend_hash_internal_pointer_reset ( & phar -> manifest ) ;
596
- HASH_KEY_NON_EXISTENT != zend_hash_get_current_key ( & phar -> manifest , & str_key , & unused );
597
- zend_hash_move_forward (& phar -> manifest )
598
- ) {
599
- if ( ZSTR_LEN ( str_key ) > path_len &&
600
- memcmp (ZSTR_VAL (str_key ), ZSTR_VAL ( resource -> path ) + 1 , path_len ) == 0 &&
601
- IS_SLASH ( ZSTR_VAL ( str_key )[ path_len ]) ) {
593
+ zend_string * str_key ;
594
+
595
+ ZEND_HASH_MAP_FOREACH_STR_KEY (& phar -> manifest , str_key ) {
596
+ if (
597
+ zend_string_starts_with_cstr ( str_key , ZSTR_VAL ( resource -> path ) + 1 , path_len )
598
+ && IS_SLASH (ZSTR_VAL (str_key )[ path_len ])
599
+ ) {
602
600
php_stream_wrapper_log_error (wrapper , options , "phar error: Directory not empty" );
603
601
if (entry -> is_temp_dir ) {
604
602
efree (entry -> filename );
@@ -607,15 +605,14 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
607
605
php_url_free (resource );
608
606
return 0 ;
609
607
}
610
- }
611
-
612
- for (zend_hash_internal_pointer_reset (& phar -> virtual_dirs );
613
- HASH_KEY_NON_EXISTENT != zend_hash_get_current_key (& phar -> virtual_dirs , & str_key , & unused );
614
- zend_hash_move_forward (& phar -> virtual_dirs )) {
615
-
616
- if (ZSTR_LEN (str_key ) > path_len &&
617
- memcmp (ZSTR_VAL (str_key ), ZSTR_VAL (resource -> path )+ 1 , path_len ) == 0 &&
618
- IS_SLASH (ZSTR_VAL (str_key )[path_len ])) {
608
+ } ZEND_HASH_FOREACH_END ();
609
+
610
+ ZEND_HASH_MAP_FOREACH_STR_KEY (& phar -> virtual_dirs , str_key ) {
611
+ ZEND_ASSERT (str_key );
612
+ if (
613
+ zend_string_starts_with_cstr (str_key , ZSTR_VAL (resource -> path )+ 1 , path_len )
614
+ && IS_SLASH (ZSTR_VAL (str_key )[path_len ])
615
+ ) {
619
616
php_stream_wrapper_log_error (wrapper , options , "phar error: Directory not empty" );
620
617
if (entry -> is_temp_dir ) {
621
618
efree (entry -> filename );
@@ -624,7 +621,7 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
624
621
php_url_free (resource );
625
622
return 0 ;
626
623
}
627
- }
624
+ } ZEND_HASH_FOREACH_END ();
628
625
}
629
626
630
627
if (entry -> is_temp_dir ) {
0 commit comments