@@ -1783,8 +1783,9 @@ zend_result phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t s
17831783}
17841784/* }}} */
17851785
1786- ZEND_ATTRIBUTE_NONNULL zend_result phar_create_signature (phar_archive_data * phar , php_stream * fp , char * * signature , size_t * signature_length , char * * error ) /* {{{ */
1786+ ZEND_ATTRIBUTE_NONNULL zend_string * phar_create_signature (phar_archive_data * phar , php_stream * fp , char * * error ) /* {{{ */
17871787{
1788+ zend_string * signature = NULL ;
17881789 unsigned char buf [1024 ];
17891790 size_t sig_len ;
17901791
@@ -1807,8 +1808,7 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_create_signature(phar_archive_data *phar
18071808 }
18081809
18091810 PHP_SHA512Final (digest , & context );
1810- * signature = estrndup ((char * ) digest , 64 );
1811- * signature_length = 64 ;
1811+ signature = zend_string_init ((const char * )digest , 64 , false);
18121812 break ;
18131813 }
18141814 default :
@@ -1825,8 +1825,7 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_create_signature(phar_archive_data *phar
18251825 }
18261826
18271827 PHP_SHA256Final (digest , & context );
1828- * signature = estrndup ((char * ) digest , 32 );
1829- * signature_length = 32 ;
1828+ signature = zend_string_init ((const char * )digest , 32 , false);
18301829 break ;
18311830 }
18321831 case PHAR_SIG_OPENSSL_SHA512 :
@@ -1852,22 +1851,22 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_create_signature(phar_archive_data *phar
18521851
18531852 if (in == NULL ) {
18541853 spprintf (error , 0 , "unable to write to phar \"%s\" with requested openssl signature" , ZSTR_VAL (phar -> fname ));
1855- return FAILURE ;
1854+ return NULL ;
18561855 }
18571856
18581857 key = PEM_read_bio_PrivateKey (in , NULL ,NULL , "" );
18591858 BIO_free (in );
18601859
18611860 if (!key ) {
18621861 * error = estrdup ("unable to process private key" );
1863- return FAILURE ;
1862+ return NULL ;
18641863 }
18651864
18661865 md_ctx = EVP_MD_CTX_create ();
18671866 if (md_ctx == NULL ) {
18681867 EVP_PKEY_free (key );
18691868 spprintf (error , 0 , "unable to initialize openssl signature for phar \"%s\"" , ZSTR_VAL (phar -> fname ));
1870- return FAILURE ;
1869+ return NULL ;
18711870 }
18721871
18731872 siglen = EVP_PKEY_size (key );
@@ -1878,7 +1877,7 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_create_signature(phar_archive_data *phar
18781877 EVP_MD_CTX_destroy (md_ctx );
18791878 efree (sigbuf );
18801879 spprintf (error , 0 , "unable to initialize openssl signature for phar \"%s\"" , ZSTR_VAL (phar -> fname ));
1881- return FAILURE ;
1880+ return NULL ;
18821881 }
18831882
18841883 while ((sig_len = php_stream_read (fp , (char * )buf , sizeof (buf ))) > 0 ) {
@@ -1887,7 +1886,7 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_create_signature(phar_archive_data *phar
18871886 EVP_MD_CTX_destroy (md_ctx );
18881887 efree (sigbuf );
18891888 spprintf (error , 0 , "unable to update the openssl signature for phar \"%s\"" , ZSTR_VAL (phar -> fname ));
1890- return FAILURE ;
1889+ return NULL ;
18911890 }
18921891 }
18931892
@@ -1896,12 +1895,14 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_create_signature(phar_archive_data *phar
18961895 EVP_MD_CTX_destroy (md_ctx );
18971896 efree (sigbuf );
18981897 spprintf (error , 0 , "unable to write phar \"%s\" with requested openssl signature" , ZSTR_VAL (phar -> fname ));
1899- return FAILURE ;
1898+ return NULL ;
19001899 }
19011900
19021901 sigbuf [siglen ] = '\0' ;
19031902 EVP_PKEY_free (key );
19041903 EVP_MD_CTX_destroy (md_ctx );
1904+ signature = zend_string_init ((const char * )sigbuf , siglen , false);
1905+ efree (sigbuf );
19051906#else
19061907 size_t siglen ;
19071908 sigbuf = NULL ;
@@ -1910,11 +1911,11 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_create_signature(phar_archive_data *phar
19101911
19111912 if (FAILURE == phar_call_openssl_signverify (true, fp , php_stream_tell (fp ), PHAR_G (openssl_privatekey ), PHAR_G (openssl_privatekey_len ), (char * * )& sigbuf , & siglen , phar -> sig_flags )) {
19121913 spprintf (error , 0 , "unable to write phar \"%s\" with requested openssl signature" , ZSTR_VAL (phar -> fname ));
1913- return FAILURE ;
1914+ return NULL ;
19141915 }
1916+ signature = zend_string_init ((const char * )sigbuf , siglen , false);
1917+ efree (sigbuf );
19151918#endif
1916- * signature = (char * ) sigbuf ;
1917- * signature_length = siglen ;
19181919 }
19191920 break ;
19201921 case PHAR_SIG_SHA1 : {
@@ -1928,8 +1929,7 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_create_signature(phar_archive_data *phar
19281929 }
19291930
19301931 PHP_SHA1Final (digest , & context );
1931- * signature = estrndup ((char * ) digest , 20 );
1932- * signature_length = 20 ;
1932+ signature = zend_string_init ((const char * )digest , 20 , false);
19331933 break ;
19341934 }
19351935 case PHAR_SIG_MD5 : {
@@ -1943,14 +1943,13 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_create_signature(phar_archive_data *phar
19431943 }
19441944
19451945 PHP_MD5Final (digest , & context );
1946- * signature = estrndup ((char * ) digest , 16 );
1947- * signature_length = 16 ;
1946+ signature = zend_string_init ((const char * )digest , 16 , false);
19481947 break ;
19491948 }
19501949 }
19511950
1952- phar -> sig_len = phar_hex_str (( const char * ) * signature , * signature_length , & phar -> signature );
1953- return SUCCESS ;
1951+ phar -> sig_len = phar_hex_str (ZSTR_VAL ( signature ), ZSTR_LEN ( signature ) , & phar -> signature );
1952+ return signature ;
19541953}
19551954/* }}} */
19561955
0 commit comments