@@ -1823,12 +1823,11 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /*
18231823 ze_zip_object * ze_obj = Z_ZIP_P (self );
18241824
18251825 for (int i = 0 ; i < found ; i ++ ) {
1826- char * file_stripped , * entry_name ;
1827- size_t entry_name_len , file_stripped_len ;
1828- char entry_name_buf [MAXPATHLEN ];
18291826 zend_string * basename = NULL ;
18301827
18311828 if ((zval_file = zend_hash_index_find (Z_ARRVAL_P (return_value ), i )) != NULL ) {
1829+ const char * file_stripped ;
1830+ size_t file_stripped_len ;
18321831 if (opts .remove_all_path ) {
18331832 basename = php_basename (Z_STRVAL_P (zval_file ), Z_STRLEN_P (zval_file ), NULL , 0 );
18341833 file_stripped = ZSTR_VAL (basename );
@@ -1846,6 +1845,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /*
18461845 file_stripped_len = Z_STRLEN_P (zval_file );
18471846 }
18481847
1848+ zend_string * entry_name ;
18491849 if (opts .add_path ) {
18501850 if ((ZSTR_LEN (opts .add_path ) + file_stripped_len ) > MAXPATHLEN ) {
18511851 if (basename ) {
@@ -1856,20 +1856,25 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /*
18561856 zend_array_destroy (Z_ARR_P (return_value ));
18571857 RETURN_FALSE ;
18581858 }
1859- snprintf (entry_name_buf , MAXPATHLEN , "%s%s" , ZSTR_VAL (opts .add_path ), file_stripped );
1859+ entry_name = zend_string_concat2 (
1860+ ZSTR_VAL (opts .add_path ), ZSTR_LEN (opts .add_path ),
1861+ file_stripped , file_stripped_len
1862+ );
18601863 } else {
1861- snprintf ( entry_name_buf , MAXPATHLEN , "%s" , file_stripped );
1864+ entry_name = zend_string_init ( file_stripped , file_stripped_len , false );
18621865 }
1866+ ZEND_ASSERT (ZSTR_LEN (entry_name ) <= MAXPATHLEN );
18631867
1864- entry_name = entry_name_buf ;
1865- entry_name_len = strlen (entry_name );
18661868 if (basename ) {
18671869 zend_string_release_ex (basename , false);
18681870 basename = NULL ;
18691871 }
18701872
1871- if (php_zip_add_file (ze_obj , Z_STRVAL_P (zval_file ), Z_STRLEN_P (zval_file ),
1872- entry_name , entry_name_len , 0 , 0 , -1 , opts .flags ) == FAILURE ) {
1873+ const zend_result status = php_zip_add_file (ze_obj , Z_STRVAL_P (zval_file ), Z_STRLEN_P (zval_file ),
1874+ ZSTR_VAL (entry_name ), ZSTR_LEN (entry_name ), 0 , 0 , -1 , opts .flags );
1875+
1876+ zend_string_release_ex (entry_name , false);
1877+ if (status == FAILURE ) {
18731878 zend_array_destroy (Z_ARR_P (return_value ));
18741879 RETURN_FALSE ;
18751880 }
0 commit comments