@@ -1359,10 +1359,9 @@ PHP_METHOD(Phar, __destruct)
1359
1359
struct _phar_t {
1360
1360
phar_archive_object * p ;
1361
1361
zend_class_entry * c ;
1362
- char * b ;
1362
+ zend_string * base ;
1363
1363
zval * ret ;
1364
1364
php_stream * fp ;
1365
- uint32_t l ;
1366
1365
int count ;
1367
1366
};
1368
1367
@@ -1371,12 +1370,12 @@ static int phar_build(zend_object_iterator *iter, void *puser) /* {{{ */
1371
1370
zval * value ;
1372
1371
bool close_fp = 1 ;
1373
1372
struct _phar_t * p_obj = (struct _phar_t * ) puser ;
1374
- size_t str_key_len , base_len = p_obj -> l ;
1373
+ size_t str_key_len , base_len = ZSTR_LEN ( p_obj -> base ) ;
1375
1374
phar_entry_data * data ;
1376
1375
php_stream * fp ;
1377
1376
size_t fname_len ;
1378
1377
size_t contents_len ;
1379
- char * fname , * error = NULL , * base = p_obj -> b , * save = NULL , * temp = NULL ;
1378
+ char * fname , * error = NULL , * base = ZSTR_VAL ( p_obj -> base ) , * save = NULL , * temp = NULL ;
1380
1379
zend_string * opened ;
1381
1380
char * str_key ;
1382
1381
zend_class_entry * ce = p_obj -> c ;
@@ -1686,14 +1685,13 @@ static int phar_build(zend_object_iterator *iter, void *puser) /* {{{ */
1686
1685
*/
1687
1686
PHP_METHOD (Phar , buildFromDirectory )
1688
1687
{
1689
- char * dir , * error ;
1690
- size_t dir_len ;
1688
+ char * error ;
1691
1689
bool apply_reg = 0 ;
1692
1690
zval arg , arg2 , iter , iteriter , regexiter ;
1693
1691
struct _phar_t pass ;
1694
- zend_string * regex = NULL ;
1692
+ zend_string * dir , * regex = NULL ;
1695
1693
1696
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "p |S" , & dir , & dir_len , & regex ) == FAILURE ) {
1694
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "P |S" , & dir , & regex ) == FAILURE ) {
1697
1695
RETURN_THROWS ();
1698
1696
}
1699
1697
@@ -1705,23 +1703,18 @@ PHP_METHOD(Phar, buildFromDirectory)
1705
1703
RETURN_THROWS ();
1706
1704
}
1707
1705
1708
- if (ZEND_SIZE_T_UINT_OVFL (dir_len )) {
1709
- RETURN_FALSE ;
1710
- }
1711
-
1712
1706
if (SUCCESS != object_init_ex (& iter , spl_ce_RecursiveDirectoryIterator )) {
1713
1707
zval_ptr_dtor (& iter );
1714
1708
zend_throw_exception_ex (spl_ce_BadMethodCallException , 0 , "Unable to instantiate directory iterator for %s" , phar_obj -> archive -> fname );
1715
1709
RETURN_THROWS ();
1716
1710
}
1717
1711
1718
- ZVAL_STRINGL (& arg , dir , dir_len );
1712
+ ZVAL_STR (& arg , dir );
1719
1713
ZVAL_LONG (& arg2 , SPL_FILE_DIR_SKIPDOTS |SPL_FILE_DIR_UNIXPATHS );
1720
1714
1721
1715
zend_call_known_instance_method_with_2_params (spl_ce_RecursiveDirectoryIterator -> constructor ,
1722
1716
Z_OBJ (iter ), NULL , & arg , & arg2 );
1723
1717
1724
- zval_ptr_dtor (& arg );
1725
1718
if (EG (exception )) {
1726
1719
zval_ptr_dtor (& iter );
1727
1720
RETURN_THROWS ();
@@ -1764,8 +1757,7 @@ PHP_METHOD(Phar, buildFromDirectory)
1764
1757
1765
1758
pass .c = apply_reg ? Z_OBJCE (regexiter ) : Z_OBJCE (iteriter );
1766
1759
pass .p = phar_obj ;
1767
- pass .b = dir ;
1768
- pass .l = (uint32_t )dir_len ;
1760
+ pass .base = dir ;
1769
1761
pass .count = 0 ;
1770
1762
pass .ret = return_value ;
1771
1763
pass .fp = php_stream_fopen_tmpfile ();
@@ -1822,11 +1814,10 @@ PHP_METHOD(Phar, buildFromIterator)
1822
1814
{
1823
1815
zval * obj ;
1824
1816
char * error ;
1825
- size_t base_len = 0 ;
1826
- char * base = NULL ;
1817
+ zend_string * base = ZSTR_EMPTY_ALLOC ();
1827
1818
struct _phar_t pass ;
1828
1819
1829
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "O|s !" , & obj , zend_ce_traversable , & base , & base_len ) == FAILURE ) {
1820
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "O|S !" , & obj , zend_ce_traversable , & base ) == FAILURE ) {
1830
1821
RETURN_THROWS ();
1831
1822
}
1832
1823
@@ -1838,10 +1829,6 @@ PHP_METHOD(Phar, buildFromIterator)
1838
1829
RETURN_THROWS ();
1839
1830
}
1840
1831
1841
- if (ZEND_SIZE_T_UINT_OVFL (base_len )) {
1842
- RETURN_FALSE ;
1843
- }
1844
-
1845
1832
if (phar_obj -> archive -> is_persistent && FAILURE == phar_copy_on_write (& (phar_obj -> archive ))) {
1846
1833
zend_throw_exception_ex (phar_ce_PharException , 0 , "phar \"%s\" is persistent, unable to copy on write" , phar_obj -> archive -> fname );
1847
1834
RETURN_THROWS ();
@@ -1851,8 +1838,7 @@ PHP_METHOD(Phar, buildFromIterator)
1851
1838
1852
1839
pass .c = Z_OBJCE_P (obj );
1853
1840
pass .p = phar_obj ;
1854
- pass .b = base ;
1855
- pass .l = (uint32_t )base_len ;
1841
+ pass .base = base ;
1856
1842
pass .ret = return_value ;
1857
1843
pass .count = 0 ;
1858
1844
pass .fp = php_stream_fopen_tmpfile ();
0 commit comments