@@ -94,31 +94,23 @@ static size_t phar_dir_read(php_stream *stream, char *buf, size_t count TSRMLS_D
94
94
{
95
95
size_t to_read ;
96
96
HashTable * data = (HashTable * )stream -> abstract ;
97
- phar_zstr key ;
98
97
char * str_key ;
99
98
uint keylen ;
100
99
ulong unused ;
101
100
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 )) {
103
102
return 0 ;
104
103
}
105
104
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 );
111
105
zend_hash_move_forward (data );
112
106
to_read = MIN (keylen , count );
113
107
114
108
if (to_read == 0 || count < keylen ) {
115
- PHAR_STR_FREE (str_key );
116
109
return 0 ;
117
110
}
118
111
119
112
memset (buf , 0 , sizeof (php_stream_dirent ));
120
113
memcpy (((php_stream_dirent * ) buf )-> d_name , str_key , to_read );
121
- PHAR_STR_FREE (str_key );
122
114
((php_stream_dirent * ) buf )-> d_name [to_read + 1 ] = '\0' ;
123
115
124
116
return sizeof (php_stream_dirent );
@@ -193,13 +185,12 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
193
185
{
194
186
HashTable * data ;
195
187
int dirlen = strlen (dir );
196
- phar_zstr key ;
197
188
char * entry , * found , * save , * str_key ;
198
189
uint keylen ;
199
190
ulong unused ;
200
191
201
192
ALLOC_HASHTABLE (data );
202
- zend_hash_init (data , 64 , zend_get_hash_value , NULL , 0 );
193
+ zend_hash_init (data , 64 , NULL , NULL , 0 );
203
194
204
195
if ((* dir == '/' && dirlen == 1 && (manifest -> nNumOfElements == 0 )) || (dirlen >= sizeof (".phar" )- 1 && !memcmp (dir , ".phar" , sizeof (".phar" )- 1 ))) {
205
196
/* make empty root directory for empty phar */
@@ -211,15 +202,12 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
211
202
zend_hash_internal_pointer_reset (manifest );
212
203
213
204
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 )) {
215
206
break ;
216
207
}
217
208
218
- PHAR_STR (key , str_key );
219
-
220
209
if (keylen <= (uint )dirlen ) {
221
210
if (keylen < (uint )dirlen || !strncmp (str_key , dir , dirlen )) {
222
- PHAR_STR_FREE (str_key );
223
211
if (SUCCESS != zend_hash_move_forward (manifest )) {
224
212
break ;
225
213
}
@@ -230,7 +218,6 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
230
218
if (* dir == '/' ) {
231
219
/* root directory */
232
220
if (keylen >= sizeof (".phar" )- 1 && !memcmp (str_key , ".phar" , sizeof (".phar" )- 1 )) {
233
- PHAR_STR_FREE (str_key );
234
221
/* do not add any magic entries to this directory */
235
222
if (SUCCESS != zend_hash_move_forward (manifest )) {
236
223
break ;
@@ -250,19 +237,16 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
250
237
entry [keylen ] = '\0' ;
251
238
}
252
239
253
- PHAR_STR_FREE (str_key );
254
240
goto PHAR_ADD_ENTRY ;
255
241
} else {
256
242
if (0 != memcmp (str_key , dir , dirlen )) {
257
243
/* entry in directory not found */
258
- PHAR_STR_FREE (str_key );
259
244
if (SUCCESS != zend_hash_move_forward (manifest )) {
260
245
break ;
261
246
}
262
247
continue ;
263
248
} else {
264
249
if (str_key [dirlen ] != '/' ) {
265
- PHAR_STR_FREE (str_key );
266
250
if (SUCCESS != zend_hash_move_forward (manifest )) {
267
251
break ;
268
252
}
@@ -289,7 +273,6 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest TSRMLS_DC)
289
273
entry [keylen - dirlen - 1 ] = '\0' ;
290
274
keylen = keylen - dirlen - 1 ;
291
275
}
292
- PHAR_STR_FREE (str_key );
293
276
PHAR_ADD_ENTRY :
294
277
if (keylen ) {
295
278
phar_add_empty (data , entry , keylen );
@@ -324,7 +307,6 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
324
307
php_url * resource = NULL ;
325
308
php_stream * ret ;
326
309
char * internal_file , * error , * str_key ;
327
- phar_zstr key ;
328
310
uint keylen ;
329
311
ulong unused ;
330
312
phar_archive_data * phar ;
@@ -405,17 +387,14 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
405
387
while (FAILURE != zend_hash_has_more_elements (& phar -> manifest )) {
406
388
if (HASH_KEY_NON_EXISTENT !=
407
389
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 )) {
410
391
if (keylen > (uint )i_len && 0 == memcmp (str_key , internal_file , i_len )) {
411
- PHAR_STR_FREE (str_key );
412
392
/* directory found */
413
393
internal_file = estrndup (internal_file ,
414
394
i_len );
415
395
php_url_free (resource );
416
396
return phar_make_dirstream (internal_file , & phar -> manifest TSRMLS_CC );
417
397
}
418
- PHAR_STR_FREE (str_key );
419
398
}
420
399
421
400
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
572
551
int arch_len , entry_len ;
573
552
php_url * resource = NULL ;
574
553
uint host_len ;
575
- phar_zstr key ;
576
554
char * str_key ;
577
555
uint key_len ;
578
556
ulong unused ;
@@ -637,15 +615,12 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
637
615
638
616
if (!entry -> is_deleted ) {
639
617
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
+ ) {
645
621
if (key_len > path_len &&
646
622
memcmp (str_key , resource -> path + 1 , path_len ) == 0 &&
647
623
IS_SLASH (str_key [path_len ])) {
648
- PHAR_STR_FREE (str_key );
649
624
php_stream_wrapper_log_error (wrapper , options TSRMLS_CC , "phar error: Directory not empty" );
650
625
if (entry -> is_temp_dir ) {
651
626
efree (entry -> filename );
@@ -654,19 +629,15 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
654
629
php_url_free (resource );
655
630
return 0 ;
656
631
}
657
- PHAR_STR_FREE (str_key );
658
632
}
659
633
660
634
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 );
662
636
zend_hash_move_forward (& phar -> virtual_dirs )) {
663
637
664
- PHAR_STR (key , str_key );
665
-
666
638
if (key_len > path_len &&
667
639
memcmp (str_key , resource -> path + 1 , path_len ) == 0 &&
668
640
IS_SLASH (str_key [path_len ])) {
669
- PHAR_STR_FREE (str_key );
670
641
php_stream_wrapper_log_error (wrapper , options TSRMLS_CC , "phar error: Directory not empty" );
671
642
if (entry -> is_temp_dir ) {
672
643
efree (entry -> filename );
@@ -675,7 +646,6 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
675
646
php_url_free (resource );
676
647
return 0 ;
677
648
}
678
- PHAR_STR_FREE (str_key );
679
649
}
680
650
}
681
651
0 commit comments