@@ -94,31 +94,23 @@ static size_t phar_dir_read(php_stream *stream, char *buf, size_t count TSRMLS_D
9494{
9595 size_t to_read ;
9696 HashTable * data = (HashTable * )stream -> abstract ;
97- phar_zstr key ;
9897 char * str_key ;
9998 uint keylen ;
10099 ulong unused ;
101100
102- if (FAILURE == zend_hash_has_more_elements (data )) {
101+ if (HASH_KEY_NON_EXISTENT == zend_hash_get_current_key_ex (data , & str_key , & keylen , & unused , 0 , NULL )) {
103102 return 0 ;
104103 }
105104
106- if (HASH_KEY_NON_EXISTENT == zend_hash_get_current_key_ex (data , & key , & keylen , & unused , 0 , NULL )) {
107- return 0 ;
108- }
109-
110- PHAR_STR (key , str_key );
111105 zend_hash_move_forward (data );
112106 to_read = MIN (keylen , count );
113107
114108 if (to_read == 0 || count < keylen ) {
115- PHAR_STR_FREE (str_key );
116109 return 0 ;
117110 }
118111
119112 memset (buf , 0 , sizeof (php_stream_dirent ));
120113 memcpy (((php_stream_dirent * ) buf )-> d_name , str_key , to_read );
121- PHAR_STR_FREE (str_key );
122114 ((php_stream_dirent * ) buf )-> d_name [to_read + 1 ] = '\0' ;
123115
124116 return sizeof (php_stream_dirent );
@@ -193,13 +185,12 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
193185{
194186 HashTable * data ;
195187 int dirlen = strlen (dir );
196- phar_zstr key ;
197188 char * entry , * found , * save , * str_key ;
198189 uint keylen ;
199190 ulong unused ;
200191
201192 ALLOC_HASHTABLE (data );
202- zend_hash_init (data , 64 , zend_get_hash_value , NULL , 0 );
193+ zend_hash_init (data , 64 , NULL , NULL , 0 );
203194
204195 if ((* dir == '/' && dirlen == 1 && (manifest -> nNumOfElements == 0 )) || (dirlen >= sizeof (".phar" )- 1 && !memcmp (dir , ".phar" , sizeof (".phar" )- 1 ))) {
205196 /* make empty root directory for empty phar */
@@ -211,15 +202,12 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
211202 zend_hash_internal_pointer_reset (manifest );
212203
213204 while (FAILURE != zend_hash_has_more_elements (manifest )) {
214- if (HASH_KEY_NON_EXISTENT == zend_hash_get_current_key_ex (manifest , & key , & keylen , & unused , 0 , NULL )) {
205+ if (HASH_KEY_NON_EXISTENT == zend_hash_get_current_key_ex (manifest , & str_key , & keylen , & unused , 0 , NULL )) {
215206 break ;
216207 }
217208
218- PHAR_STR (key , str_key );
219-
220209 if (keylen <= (uint )dirlen ) {
221210 if (keylen < (uint )dirlen || !strncmp (str_key , dir , dirlen )) {
222- PHAR_STR_FREE (str_key );
223211 if (SUCCESS != zend_hash_move_forward (manifest )) {
224212 break ;
225213 }
@@ -230,7 +218,6 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
230218 if (* dir == '/' ) {
231219 /* root directory */
232220 if (keylen >= sizeof (".phar" )- 1 && !memcmp (str_key , ".phar" , sizeof (".phar" )- 1 )) {
233- PHAR_STR_FREE (str_key );
234221 /* do not add any magic entries to this directory */
235222 if (SUCCESS != zend_hash_move_forward (manifest )) {
236223 break ;
@@ -250,19 +237,16 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
250237 entry [keylen ] = '\0' ;
251238 }
252239
253- PHAR_STR_FREE (str_key );
254240 goto PHAR_ADD_ENTRY ;
255241 } else {
256242 if (0 != memcmp (str_key , dir , dirlen )) {
257243 /* entry in directory not found */
258- PHAR_STR_FREE (str_key );
259244 if (SUCCESS != zend_hash_move_forward (manifest )) {
260245 break ;
261246 }
262247 continue ;
263248 } else {
264249 if (str_key [dirlen ] != '/' ) {
265- PHAR_STR_FREE (str_key );
266250 if (SUCCESS != zend_hash_move_forward (manifest )) {
267251 break ;
268252 }
@@ -289,7 +273,6 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
289273 entry [keylen - dirlen - 1 ] = '\0' ;
290274 keylen = keylen - dirlen - 1 ;
291275 }
292- PHAR_STR_FREE (str_key );
293276PHAR_ADD_ENTRY :
294277 if (keylen ) {
295278 phar_add_empty (data , entry , keylen );
@@ -324,7 +307,6 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
324307 php_url * resource = NULL ;
325308 php_stream * ret ;
326309 char * internal_file , * error , * str_key ;
327- phar_zstr key ;
328310 uint keylen ;
329311 ulong unused ;
330312 phar_archive_data * phar ;
@@ -405,17 +387,14 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
405387 while (FAILURE != zend_hash_has_more_elements (& phar -> manifest )) {
406388 if (HASH_KEY_NON_EXISTENT !=
407389 zend_hash_get_current_key_ex (
408- & phar -> manifest , & key , & keylen , & unused , 0 , NULL )) {
409- PHAR_STR (key , str_key );
390+ & phar -> manifest , & str_key , & keylen , & unused , 0 , NULL )) {
410391 if (keylen > (uint )i_len && 0 == memcmp (str_key , internal_file , i_len )) {
411- PHAR_STR_FREE (str_key );
412392 /* directory found */
413393 internal_file = estrndup (internal_file ,
414394 i_len );
415395 php_url_free (resource );
416396 return phar_make_dirstream (internal_file , & phar -> manifest TSRMLS_CC );
417397 }
418- PHAR_STR_FREE (str_key );
419398 }
420399
421400 if (SUCCESS != zend_hash_move_forward (& phar -> manifest )) {
@@ -572,7 +551,6 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
572551 int arch_len , entry_len ;
573552 php_url * resource = NULL ;
574553 uint host_len ;
575- phar_zstr key ;
576554 char * str_key ;
577555 uint key_len ;
578556 ulong unused ;
@@ -637,15 +615,12 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
637615
638616 if (!entry -> is_deleted ) {
639617 for (zend_hash_internal_pointer_reset (& phar -> manifest );
640- HASH_KEY_NON_EXISTENT != zend_hash_get_current_key_ex (& phar -> manifest , & key , & key_len , & unused , 0 , NULL );
641- zend_hash_move_forward (& phar -> manifest )) {
642-
643- PHAR_STR (key , str_key );
644-
618+ HASH_KEY_NON_EXISTENT != zend_hash_get_current_key_ex (& phar -> manifest , & str_key , & key_len , & unused , 0 , NULL );
619+ zend_hash_move_forward (& phar -> manifest )
620+ ) {
645621 if (key_len > path_len &&
646622 memcmp (str_key , resource -> path + 1 , path_len ) == 0 &&
647623 IS_SLASH (str_key [path_len ])) {
648- PHAR_STR_FREE (str_key );
649624 php_stream_wrapper_log_error (wrapper , options TSRMLS_CC , "phar error: Directory not empty" );
650625 if (entry -> is_temp_dir ) {
651626 efree (entry -> filename );
@@ -654,19 +629,15 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
654629 php_url_free (resource );
655630 return 0 ;
656631 }
657- PHAR_STR_FREE (str_key );
658632 }
659633
660634 for (zend_hash_internal_pointer_reset (& phar -> virtual_dirs );
661- HASH_KEY_NON_EXISTENT != zend_hash_get_current_key_ex (& phar -> virtual_dirs , & key , & key_len , & unused , 0 , NULL );
635+ HASH_KEY_NON_EXISTENT != zend_hash_get_current_key_ex (& phar -> virtual_dirs , & str_key , & key_len , & unused , 0 , NULL );
662636 zend_hash_move_forward (& phar -> virtual_dirs )) {
663637
664- PHAR_STR (key , str_key );
665-
666638 if (key_len > path_len &&
667639 memcmp (str_key , resource -> path + 1 , path_len ) == 0 &&
668640 IS_SLASH (str_key [path_len ])) {
669- PHAR_STR_FREE (str_key );
670641 php_stream_wrapper_log_error (wrapper , options TSRMLS_CC , "phar error: Directory not empty" );
671642 if (entry -> is_temp_dir ) {
672643 efree (entry -> filename );
@@ -675,7 +646,6 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
675646 php_url_free (resource );
676647 return 0 ;
677648 }
678- PHAR_STR_FREE (str_key );
679649 }
680650 }
681651
0 commit comments