mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
ext/phar: Use more specialized types instead of int
This commit is contained in:
parent
81d232fed5
commit
20f7e08687
5 changed files with 171 additions and 176 deletions
|
@ -238,7 +238,7 @@ void phar_destroy_phar_data(phar_archive_data *phar) /* {{{ */
|
|||
/**
|
||||
* Delete refcount and destruct if needed. On destruct return 1 else 0.
|
||||
*/
|
||||
int phar_archive_delref(phar_archive_data *phar) /* {{{ */
|
||||
bool phar_archive_delref(phar_archive_data *phar) /* {{{ */
|
||||
{
|
||||
if (phar->is_persistent) {
|
||||
return 0;
|
||||
|
@ -481,7 +481,7 @@ void phar_entry_remove(phar_entry_data *idata, char **error) /* {{{ */
|
|||
/**
|
||||
* Open an already loaded phar
|
||||
*/
|
||||
int phar_open_parsed_phar(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
|
||||
static zend_result phar_open_parsed_phar(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
|
||||
{
|
||||
phar_archive_data *phar;
|
||||
#ifdef PHP_WIN32
|
||||
|
@ -559,7 +559,7 @@ int phar_open_parsed_phar(char *fname, size_t fname_len, char *alias, size_t ali
|
|||
* Attempt to serialize the data.
|
||||
* Callers are responsible for handling EG(exception) if one occurs.
|
||||
*/
|
||||
void phar_metadata_tracker_try_ensure_has_serialized_data(phar_metadata_tracker *tracker, int persistent) /* {{{ */
|
||||
void phar_metadata_tracker_try_ensure_has_serialized_data(phar_metadata_tracker *tracker, bool persistent) /* {{{ */
|
||||
{
|
||||
php_serialize_data_t metadata_hash;
|
||||
smart_str metadata_str = {0};
|
||||
|
@ -585,7 +585,7 @@ void phar_metadata_tracker_try_ensure_has_serialized_data(phar_metadata_tracker
|
|||
*
|
||||
* Precondition: phar_metadata_tracker_has_data is true
|
||||
*/
|
||||
int phar_metadata_tracker_unserialize_or_copy(phar_metadata_tracker *tracker, zval *metadata, int persistent, HashTable *unserialize_options, const char* method_name) /* {{{ */
|
||||
zend_result phar_metadata_tracker_unserialize_or_copy(phar_metadata_tracker *tracker, zval *metadata, bool persistent, HashTable *unserialize_options, const char* method_name) /* {{{ */
|
||||
{
|
||||
const bool has_unserialize_options = unserialize_options != NULL && zend_hash_num_elements(unserialize_options) > 0;
|
||||
/* It should be impossible to create a zval in a persistent phar/entry. */
|
||||
|
@ -626,7 +626,7 @@ int phar_metadata_tracker_unserialize_or_copy(phar_metadata_tracker *tracker, zv
|
|||
/**
|
||||
* Check if this has any data, serialized or as a raw value.
|
||||
*/
|
||||
bool phar_metadata_tracker_has_data(const phar_metadata_tracker *tracker, int persistent) /* {{{ */
|
||||
bool phar_metadata_tracker_has_data(const phar_metadata_tracker *tracker, bool persistent) /* {{{ */
|
||||
{
|
||||
ZEND_ASSERT(!persistent || Z_ISUNDEF(tracker->val));
|
||||
return !Z_ISUNDEF(tracker->val) || tracker->str != NULL;
|
||||
|
@ -636,7 +636,7 @@ bool phar_metadata_tracker_has_data(const phar_metadata_tracker *tracker, int pe
|
|||
/**
|
||||
* Free memory used to track the metadata and set all fields to be null/undef.
|
||||
*/
|
||||
void phar_metadata_tracker_free(phar_metadata_tracker *tracker, int persistent) /* {{{ */
|
||||
void phar_metadata_tracker_free(phar_metadata_tracker *tracker, bool persistent) /* {{{ */
|
||||
{
|
||||
/* Free the string before the zval in case the zval's destructor modifies the metadata */
|
||||
if (tracker->str) {
|
||||
|
@ -658,7 +658,7 @@ void phar_metadata_tracker_free(phar_metadata_tracker *tracker, int persistent)
|
|||
/**
|
||||
* Free memory used to track the metadata and set all fields to be null/undef.
|
||||
*/
|
||||
void phar_metadata_tracker_copy(phar_metadata_tracker *dest, const phar_metadata_tracker *source, int persistent) /* {{{ */
|
||||
void phar_metadata_tracker_copy(phar_metadata_tracker *dest, const phar_metadata_tracker *source, bool persistent) /* {{{ */
|
||||
{
|
||||
ZEND_ASSERT(dest != source);
|
||||
phar_metadata_tracker_free(dest, persistent);
|
||||
|
@ -694,7 +694,7 @@ void phar_metadata_tracker_clone(phar_metadata_tracker *tracker) /* {{{ */
|
|||
*
|
||||
* data is the serialized zval
|
||||
*/
|
||||
void phar_parse_metadata_lazy(const char *buffer, phar_metadata_tracker *tracker, uint32_t zip_metadata_len, int persistent) /* {{{ */
|
||||
void phar_parse_metadata_lazy(const char *buffer, phar_metadata_tracker *tracker, uint32_t zip_metadata_len, bool persistent) /* {{{ */
|
||||
{
|
||||
phar_metadata_tracker_free(tracker, persistent);
|
||||
if (zip_metadata_len) {
|
||||
|
@ -1302,7 +1302,7 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, size_t fname_len, ch
|
|||
/**
|
||||
* Create or open a phar for writing
|
||||
*/
|
||||
int phar_open_or_create_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
|
||||
zend_result phar_open_or_create_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
|
||||
{
|
||||
const char *ext_str, *z;
|
||||
char *my_error;
|
||||
|
@ -1379,7 +1379,9 @@ check_file:
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
int phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
|
||||
static zend_result phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error);
|
||||
|
||||
zend_result phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
|
||||
{
|
||||
phar_archive_data *mydata;
|
||||
php_stream *fp;
|
||||
|
@ -1402,7 +1404,7 @@ int phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, si
|
|||
}
|
||||
|
||||
if (fp) {
|
||||
if (phar_open_from_fp(fp, fname, fname_len, alias, alias_len, options, pphar, is_data, error) == SUCCESS) {
|
||||
if (phar_open_from_fp(fp, fname, fname_len, alias, alias_len, options, pphar, error) == SUCCESS) {
|
||||
if ((*pphar)->is_data || !PHAR_G(readonly)) {
|
||||
(*pphar)->is_writeable = 1;
|
||||
}
|
||||
|
@ -1532,18 +1534,18 @@ int phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, si
|
|||
* that the manifest is proper, then pass it to phar_parse_pharfile(). SUCCESS
|
||||
* or FAILURE is returned and pphar is set to a pointer to the phar's manifest
|
||||
*/
|
||||
int phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
|
||||
zend_result phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
|
||||
{
|
||||
php_stream *fp;
|
||||
zend_string *actual;
|
||||
int ret, is_data = 0;
|
||||
bool is_data = false;
|
||||
|
||||
if (error) {
|
||||
*error = NULL;
|
||||
}
|
||||
|
||||
if (!strstr(fname, ".phar")) {
|
||||
is_data = 1;
|
||||
is_data = true;
|
||||
}
|
||||
|
||||
if (phar_open_parsed_phar(fname, fname_len, alias, alias_len, is_data, options, pphar, error) == SUCCESS) {
|
||||
|
@ -1574,7 +1576,7 @@ int phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t a
|
|||
fname_len = ZSTR_LEN(actual);
|
||||
}
|
||||
|
||||
ret = phar_open_from_fp(fp, fname, fname_len, alias, alias_len, options, pphar, is_data, error);
|
||||
zend_result ret = phar_open_from_fp(fp, fname, fname_len, alias, alias_len, options, pphar, error);
|
||||
|
||||
if (actual) {
|
||||
zend_string_release_ex(actual, 0);
|
||||
|
@ -1618,7 +1620,7 @@ static inline char *phar_strnstr(const char *buf, int buf_len, const char *searc
|
|||
* that the manifest is proper, then pass it to phar_parse_pharfile(). SUCCESS
|
||||
* or FAILURE is returned and pphar is set to a pointer to the phar's manifest
|
||||
*/
|
||||
static int phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, int is_data, char **error) /* {{{ */
|
||||
static zend_result phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
|
||||
{
|
||||
static const char token[] = "__HALT_COMPILER();";
|
||||
static const char zip_magic[] = "PK\x03\x04";
|
||||
|
@ -1956,7 +1958,7 @@ static int phar_check_str(const char *fname, const char *ext_str, size_t ext_len
|
|||
* the last parameter should be set to tell the thing to assume that filename is the full path, and only to check the
|
||||
* extension rules, not to iterate.
|
||||
*/
|
||||
int phar_detect_phar_fname_ext(const char *filename, size_t filename_len, const char **ext_str, size_t *ext_len, int executable, int for_create, int is_complete) /* {{{ */
|
||||
zend_result phar_detect_phar_fname_ext(const char *filename, size_t filename_len, const char **ext_str, size_t *ext_len, int executable, int for_create, int is_complete) /* {{{ */
|
||||
{
|
||||
const char *pos, *slash;
|
||||
|
||||
|
@ -2101,7 +2103,7 @@ next_extension:
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
static int php_check_dots(const char *element, size_t n) /* {{{ */
|
||||
static bool php_check_dots(const char *element, size_t n) /* {{{ */
|
||||
{
|
||||
for(n-- ; n != SIZE_MAX; --n) {
|
||||
if (element[n] != '.') {
|
||||
|
@ -2237,7 +2239,7 @@ last_time:
|
|||
*
|
||||
* This is used by phar_parse_url()
|
||||
*/
|
||||
int phar_split_fname(const char *filename, size_t filename_len, char **arch, size_t *arch_len, char **entry, size_t *entry_len, int executable, int for_create) /* {{{ */
|
||||
zend_result phar_split_fname(const char *filename, size_t filename_len, char **arch, size_t *arch_len, char **entry, size_t *entry_len, int executable, int for_create) /* {{{ */
|
||||
{
|
||||
const char *ext_str;
|
||||
#ifdef PHP_WIN32
|
||||
|
@ -2314,7 +2316,7 @@ int phar_split_fname(const char *filename, size_t filename_len, char **arch, siz
|
|||
* Invoked when a user calls Phar::mapPhar() from within an executing .phar
|
||||
* to set up its manifest directly
|
||||
*/
|
||||
int phar_open_executed_filename(char *alias, size_t alias_len, char **error) /* {{{ */
|
||||
zend_result phar_open_executed_filename(char *alias, size_t alias_len, char **error) /* {{{ */
|
||||
{
|
||||
if (error) {
|
||||
*error = NULL;
|
||||
|
@ -2362,7 +2364,7 @@ int phar_open_executed_filename(char *alias, size_t alias_len, char **error) /*
|
|||
fname = actual;
|
||||
}
|
||||
|
||||
int ret = phar_open_from_fp(fp, ZSTR_VAL(fname), ZSTR_LEN(fname), alias, alias_len, REPORT_ERRORS, NULL, 0, error);
|
||||
zend_result ret = phar_open_from_fp(fp, ZSTR_VAL(fname), ZSTR_LEN(fname), alias, alias_len, REPORT_ERRORS, NULL, error);
|
||||
|
||||
if (actual) {
|
||||
zend_string_release_ex(actual, 0);
|
||||
|
@ -2375,10 +2377,8 @@ int phar_open_executed_filename(char *alias, size_t alias_len, char **error) /*
|
|||
/**
|
||||
* Validate the CRC32 of a file opened from within the phar
|
||||
*/
|
||||
int phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error, int process_zip) /* {{{ */
|
||||
zend_result phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error, int process_zip) /* {{{ */
|
||||
{
|
||||
uint32_t crc = php_crc32_bulk_init();
|
||||
int len = idata->internal_file->uncompressed_filesize, ret;
|
||||
php_stream *fp = idata->fp;
|
||||
phar_entry_info *entry = idata->internal_file;
|
||||
|
||||
|
@ -2443,7 +2443,8 @@ int phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error,
|
|||
|
||||
php_stream_seek(fp, idata->zero, SEEK_SET);
|
||||
|
||||
ret = php_crc32_stream_bulk_update(&crc, fp, len);
|
||||
uint32_t crc = php_crc32_bulk_init();
|
||||
zend_result ret = php_crc32_stream_bulk_update(&crc, fp, idata->internal_file->uncompressed_filesize);
|
||||
|
||||
php_stream_seek(fp, idata->zero, SEEK_SET);
|
||||
|
||||
|
|
|
@ -404,10 +404,8 @@ static inline void phar_unixify_path_separators(char *path, size_t path_len)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
/**
|
||||
* validate an alias, returns 1 for success, 0 for failure
|
||||
*/
|
||||
static inline int phar_validate_alias(const char *alias, size_t alias_len) /* {{{ */
|
||||
|
||||
static inline bool phar_validate_alias(const char *alias, size_t alias_len) /* {{{ */
|
||||
{
|
||||
return !(memchr(alias, '/', alias_len) || memchr(alias, '\\', alias_len) || memchr(alias, ':', alias_len) ||
|
||||
memchr(alias, ';', alias_len) || memchr(alias, '\n', alias_len) || memchr(alias, '\r', alias_len));
|
||||
|
@ -439,16 +437,15 @@ void phar_request_initialize(void);
|
|||
void phar_object_init(void);
|
||||
void phar_destroy_phar_data(phar_archive_data *phar);
|
||||
|
||||
int phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error, int process_zip);
|
||||
int phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error);
|
||||
int phar_open_or_create_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
|
||||
int phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
|
||||
int phar_open_executed_filename(char *alias, size_t alias_len, char **error);
|
||||
int phar_free_alias(phar_archive_data *phar, char *alias, size_t alias_len);
|
||||
int phar_get_archive(phar_archive_data **archive, char *fname, size_t fname_len, char *alias, size_t alias_len, char **error);
|
||||
int phar_open_parsed_phar(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
|
||||
int phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type, char *sig, size_t sig_len, char *fname, char **signature, size_t *signature_len, char **error);
|
||||
int phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signature, size_t *signature_length, char **error);
|
||||
zend_result phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error, int process_zip);
|
||||
zend_result phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error);
|
||||
zend_result phar_open_or_create_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
|
||||
zend_result phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
|
||||
zend_result phar_open_executed_filename(char *alias, size_t alias_len, char **error);
|
||||
zend_result phar_free_alias(phar_archive_data *phar, char *alias, size_t alias_len);
|
||||
zend_result phar_get_archive(phar_archive_data **archive, char *fname, size_t fname_len, char *alias, size_t alias_len, char **error);
|
||||
zend_result phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type, char *sig, size_t sig_len, char *fname, char **signature, size_t *signature_len, char **error);
|
||||
zend_result phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signature, size_t *signature_length, char **error);
|
||||
|
||||
/* utility functions */
|
||||
zend_string *phar_create_default_stub(const char *index_php, const char *web_index, char **error);
|
||||
|
@ -457,28 +454,26 @@ char *phar_compress_filter(phar_entry_info * entry, int return_unknown);
|
|||
|
||||
/* void phar_remove_virtual_dirs(phar_archive_data *phar, char *filename, size_t filename_len); */
|
||||
void phar_add_virtual_dirs(phar_archive_data *phar, char *filename, size_t filename_len);
|
||||
int phar_mount_entry(phar_archive_data *phar, char *filename, size_t filename_len, char *path, size_t path_len);
|
||||
zend_result phar_mount_entry(phar_archive_data *phar, char *filename, size_t filename_len, char *path, size_t path_len);
|
||||
zend_string *phar_find_in_include_path(zend_string *file, phar_archive_data **pphar);
|
||||
char *phar_fix_filepath(char *path, size_t *new_len, int use_cwd);
|
||||
phar_entry_info * phar_open_jit(phar_archive_data *phar, phar_entry_info *entry, char **error);
|
||||
void phar_parse_metadata_lazy(const char *buffer, phar_metadata_tracker *tracker, uint32_t zip_metadata_len, int persistent);
|
||||
bool phar_metadata_tracker_has_data(const phar_metadata_tracker* tracker, int persistent);
|
||||
void phar_parse_metadata_lazy(const char *buffer, phar_metadata_tracker *tracker, uint32_t zip_metadata_len, bool persistent);
|
||||
bool phar_metadata_tracker_has_data(const phar_metadata_tracker* tracker, bool persistent);
|
||||
/* If this has data, free it and set all values to undefined. */
|
||||
void phar_metadata_tracker_free(phar_metadata_tracker* val, int persistent);
|
||||
void phar_metadata_tracker_copy(phar_metadata_tracker* dest, const phar_metadata_tracker *source, int persistent);
|
||||
void phar_metadata_tracker_free(phar_metadata_tracker* val, bool persistent);
|
||||
void phar_metadata_tracker_copy(phar_metadata_tracker* dest, const phar_metadata_tracker *source, bool persistent);
|
||||
void phar_metadata_tracker_clone(phar_metadata_tracker* tracker);
|
||||
void phar_metadata_tracker_try_ensure_has_serialized_data(phar_metadata_tracker* tracker, int persistent);
|
||||
int phar_metadata_tracker_unserialize_or_copy(phar_metadata_tracker* tracker, zval *value, int persistent, HashTable *unserialize_options, const char* method_name);
|
||||
void phar_metadata_tracker_try_ensure_has_serialized_data(phar_metadata_tracker* tracker, bool persistent);
|
||||
zend_result phar_metadata_tracker_unserialize_or_copy(phar_metadata_tracker* tracker, zval *value, bool persistent, HashTable *unserialize_options, const char* method_name);
|
||||
void destroy_phar_manifest_entry(zval *zv);
|
||||
int phar_seek_efp(phar_entry_info *entry, zend_off_t offset, int whence, zend_off_t position, int follow_links);
|
||||
php_stream *phar_get_efp(phar_entry_info *entry, int follow_links);
|
||||
int phar_copy_entry_fp(phar_entry_info *source, phar_entry_info *dest, char **error);
|
||||
int phar_open_entry_fp(phar_entry_info *entry, char **error, int follow_links);
|
||||
zend_result phar_copy_entry_fp(phar_entry_info *source, phar_entry_info *dest, char **error);
|
||||
zend_result phar_open_entry_fp(phar_entry_info *entry, char **error, int follow_links);
|
||||
phar_entry_info *phar_get_link_source(phar_entry_info *entry);
|
||||
int phar_create_writeable_entry(phar_archive_data *phar, phar_entry_info *entry, char **error);
|
||||
int phar_separate_entry_fp(phar_entry_info *entry, char **error);
|
||||
int phar_open_archive_fp(phar_archive_data *phar);
|
||||
int phar_copy_on_write(phar_archive_data **pphar);
|
||||
zend_result phar_open_archive_fp(phar_archive_data *phar);
|
||||
zend_result phar_copy_on_write(phar_archive_data **pphar);
|
||||
|
||||
/* tar functions in tar.c */
|
||||
bool phar_is_tar(char *buf, char *fname);
|
||||
|
@ -492,23 +487,22 @@ int phar_open_or_create_zip(char *fname, size_t fname_len, char *alias, size_t a
|
|||
int phar_zip_flush(phar_archive_data *archive, char *user_stub, zend_long len, int defaultstub, char **error);
|
||||
|
||||
#ifdef PHAR_MAIN
|
||||
static int phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, int is_data, char **error);
|
||||
extern const php_stream_wrapper php_stream_phar_wrapper;
|
||||
#else
|
||||
extern HashTable cached_phars;
|
||||
extern HashTable cached_alias;
|
||||
#endif
|
||||
|
||||
int phar_archive_delref(phar_archive_data *phar);
|
||||
bool phar_archive_delref(phar_archive_data *phar);
|
||||
void phar_entry_delref(phar_entry_data *idata);
|
||||
|
||||
phar_entry_info *phar_get_entry_info(phar_archive_data *phar, char *path, size_t path_len, char **error, int security);
|
||||
phar_entry_info *phar_get_entry_info_dir(phar_archive_data *phar, char *path, size_t path_len, char dir, char **error, int security);
|
||||
phar_entry_data *phar_get_or_create_entry_data(char *fname, size_t fname_len, char *path, size_t path_len, const char *mode, char allow_dir, char **error, int security);
|
||||
int phar_get_entry_data(phar_entry_data **ret, char *fname, size_t fname_len, char *path, size_t path_len, const char *mode, char allow_dir, char **error, int security);
|
||||
zend_result phar_get_entry_data(phar_entry_data **ret, char *fname, size_t fname_len, char *path, size_t path_len, const char *mode, char allow_dir, char **error, int security);
|
||||
int phar_flush(phar_archive_data *archive, char *user_stub, zend_long len, int convert, char **error);
|
||||
int phar_detect_phar_fname_ext(const char *filename, size_t filename_len, const char **ext_str, size_t *ext_len, int executable, int for_create, int is_complete);
|
||||
int phar_split_fname(const char *filename, size_t filename_len, char **arch, size_t *arch_len, char **entry, size_t *entry_len, int executable, int for_create);
|
||||
zend_result phar_detect_phar_fname_ext(const char *filename, size_t filename_len, const char **ext_str, size_t *ext_len, int executable, int for_create, int is_complete);
|
||||
zend_result phar_split_fname(const char *filename, size_t filename_len, char **arch, size_t *arch_len, char **entry, size_t *entry_len, int executable, int for_create);
|
||||
|
||||
typedef enum {
|
||||
pcr_use_query,
|
||||
|
|
|
@ -1922,7 +1922,7 @@ PHP_METHOD(Phar, isFileFormat)
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
static int phar_copy_file_contents(phar_entry_info *entry, php_stream *fp) /* {{{ */
|
||||
static zend_result phar_copy_file_contents(phar_entry_info *entry, php_stream *fp) /* {{{ */
|
||||
{
|
||||
char *error;
|
||||
zend_off_t offset;
|
||||
|
@ -4004,7 +4004,7 @@ PHP_METHOD(Phar, getMetadata)
|
|||
/* }}} */
|
||||
|
||||
/* {{{ Modifies the phar metadata or throws */
|
||||
static int serialize_metadata_or_throw(phar_metadata_tracker *tracker, int persistent, zval *metadata)
|
||||
static zend_result serialize_metadata_or_throw(phar_metadata_tracker *tracker, int persistent, zval *metadata)
|
||||
{
|
||||
php_serialize_data_t metadata_hash;
|
||||
smart_str main_metadata_str = {0};
|
||||
|
@ -4105,7 +4105,7 @@ PHP_METHOD(Phar, delMetadata)
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
static int phar_extract_file(bool overwrite, phar_entry_info *entry, char *dest, size_t dest_len, char **error) /* {{{ */
|
||||
static zend_result phar_extract_file(bool overwrite, phar_entry_info *entry, char *dest, size_t dest_len, char **error) /* {{{ */
|
||||
{
|
||||
php_stream_statbuf ssb;
|
||||
size_t len;
|
||||
|
@ -4259,7 +4259,7 @@ static int phar_extract_file(bool overwrite, phar_entry_info *entry, char *dest,
|
|||
}
|
||||
}
|
||||
|
||||
if (FAILURE == phar_seek_efp(entry, 0, SEEK_SET, 0, 0)) {
|
||||
if (-1 == phar_seek_efp(entry, 0, SEEK_SET, 0, 0)) {
|
||||
spprintf(error, 4096, "Cannot extract \"%s\" to \"%s\", unable to seek internal file pointer", entry->filename, fullpath);
|
||||
efree(fullpath);
|
||||
php_stream_close(fp);
|
||||
|
|
|
@ -32,6 +32,6 @@ extern zend_module_entry phar_module_entry;
|
|||
#define PHP_PHAR_API PHPAPI
|
||||
#endif
|
||||
|
||||
PHP_PHAR_API int phar_resolve_alias(char *alias, size_t alias_len, char **filename, size_t *filename_len);
|
||||
PHP_PHAR_API zend_result phar_resolve_alias(char *alias, size_t alias_len, char **filename, size_t *filename_len);
|
||||
|
||||
#endif /* PHP_PHAR_H */
|
||||
|
|
228
ext/phar/util.c
228
ext/phar/util.c
|
@ -184,7 +184,7 @@ int phar_seek_efp(phar_entry_info *entry, zend_off_t offset, int whence, zend_of
|
|||
/* }}} */
|
||||
|
||||
/* mount an absolute path or uri to a path internal to the phar archive */
|
||||
int phar_mount_entry(phar_archive_data *phar, char *filename, size_t filename_len, char *path, size_t path_len) /* {{{ */
|
||||
zend_result phar_mount_entry(phar_archive_data *phar, char *filename, size_t filename_len, char *path, size_t path_len) /* {{{ */
|
||||
{
|
||||
phar_entry_info entry = {0};
|
||||
php_stream_statbuf ssb;
|
||||
|
@ -361,6 +361,105 @@ splitted:
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
static zend_result phar_create_writeable_entry(phar_archive_data *phar, phar_entry_info *entry, char **error) /* {{{ */
|
||||
{
|
||||
if (entry->fp_type == PHAR_MOD) {
|
||||
/* already newly created, truncate */
|
||||
php_stream_truncate_set_size(entry->fp, 0);
|
||||
|
||||
entry->old_flags = entry->flags;
|
||||
entry->is_modified = 1;
|
||||
phar->is_modified = 1;
|
||||
/* reset file size */
|
||||
entry->uncompressed_filesize = 0;
|
||||
entry->compressed_filesize = 0;
|
||||
entry->crc32 = 0;
|
||||
entry->flags = PHAR_ENT_PERM_DEF_FILE;
|
||||
entry->fp_type = PHAR_MOD;
|
||||
entry->offset = 0;
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (error) {
|
||||
*error = NULL;
|
||||
}
|
||||
|
||||
/* open a new temp file for writing */
|
||||
if (entry->link) {
|
||||
efree(entry->link);
|
||||
entry->link = NULL;
|
||||
entry->tar_type = (entry->is_tar ? TAR_FILE : '\0');
|
||||
}
|
||||
|
||||
entry->fp = php_stream_fopen_tmpfile();
|
||||
|
||||
if (!entry->fp) {
|
||||
if (error) {
|
||||
spprintf(error, 0, "phar error: unable to create temporary file");
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
entry->old_flags = entry->flags;
|
||||
entry->is_modified = 1;
|
||||
phar->is_modified = 1;
|
||||
/* reset file size */
|
||||
entry->uncompressed_filesize = 0;
|
||||
entry->compressed_filesize = 0;
|
||||
entry->crc32 = 0;
|
||||
entry->flags = PHAR_ENT_PERM_DEF_FILE;
|
||||
entry->fp_type = PHAR_MOD;
|
||||
entry->offset = 0;
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static zend_result phar_separate_entry_fp(phar_entry_info *entry, char **error) /* {{{ */
|
||||
{
|
||||
php_stream *fp;
|
||||
phar_entry_info *link;
|
||||
|
||||
if (FAILURE == phar_open_entry_fp(entry, error, 1)) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
if (entry->fp_type == PHAR_MOD) {
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
fp = php_stream_fopen_tmpfile();
|
||||
if (fp == NULL) {
|
||||
spprintf(error, 0, "phar error: unable to create temporary file");
|
||||
return FAILURE;
|
||||
}
|
||||
phar_seek_efp(entry, 0, SEEK_SET, 0, 1);
|
||||
link = phar_get_link_source(entry);
|
||||
|
||||
if (!link) {
|
||||
link = entry;
|
||||
}
|
||||
|
||||
if (SUCCESS != php_stream_copy_to_stream_ex(phar_get_efp(link, 0), fp, link->uncompressed_filesize, NULL)) {
|
||||
if (error) {
|
||||
spprintf(error, 4096, "phar error: cannot separate entry file \"%s\" contents in phar archive \"%s\" for write access", entry->filename, entry->phar->fname);
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
if (entry->link) {
|
||||
efree(entry->link);
|
||||
entry->link = NULL;
|
||||
entry->tar_type = (entry->is_tar ? TAR_FILE : '\0');
|
||||
}
|
||||
|
||||
entry->offset = 0;
|
||||
entry->fp = fp;
|
||||
entry->fp_type = PHAR_MOD;
|
||||
entry->is_modified = 1;
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/**
|
||||
* Retrieve a copy of the file information on a single file within a phar, or null.
|
||||
* This also transfers the open file pointer, if any, to the entry.
|
||||
|
@ -369,14 +468,14 @@ splitted:
|
|||
* appended, truncated, or read. For read, if the entry is marked unmodified, it is
|
||||
* assumed that the file pointer, if present, is opened for reading
|
||||
*/
|
||||
int phar_get_entry_data(phar_entry_data **ret, char *fname, size_t fname_len, char *path, size_t path_len, const char *mode, char allow_dir, char **error, int security) /* {{{ */
|
||||
zend_result phar_get_entry_data(phar_entry_data **ret, char *fname, size_t fname_len, char *path, size_t path_len, const char *mode, char allow_dir, char **error, int security) /* {{{ */
|
||||
{
|
||||
phar_archive_data *phar;
|
||||
phar_entry_info *entry;
|
||||
int for_write = mode[0] != 'r' || mode[1] == '+';
|
||||
int for_append = mode[0] == 'a';
|
||||
int for_create = mode[0] != 'r';
|
||||
int for_trunc = mode[0] == 'w';
|
||||
bool for_write = mode[0] != 'r' || mode[1] == '+';
|
||||
bool for_append = mode[0] == 'a';
|
||||
bool for_create = mode[0] != 'r';
|
||||
bool for_trunc = mode[0] == 'w';
|
||||
|
||||
if (!ret) {
|
||||
return FAILURE;
|
||||
|
@ -648,7 +747,7 @@ static inline void phar_set_pharfp(phar_archive_data *phar, php_stream *fp)
|
|||
}
|
||||
|
||||
/* initialize a phar_archive_data's read-only fp for existing phar data */
|
||||
int phar_open_archive_fp(phar_archive_data *phar) /* {{{ */
|
||||
zend_result phar_open_archive_fp(phar_archive_data *phar) /* {{{ */
|
||||
{
|
||||
if (phar_get_pharfp(phar)) {
|
||||
return SUCCESS;
|
||||
|
@ -669,7 +768,7 @@ int phar_open_archive_fp(phar_archive_data *phar) /* {{{ */
|
|||
/* }}} */
|
||||
|
||||
/* copy file data from an existing to a new phar_entry_info that is not in the manifest */
|
||||
int phar_copy_entry_fp(phar_entry_info *source, phar_entry_info *dest, char **error) /* {{{ */
|
||||
zend_result phar_copy_entry_fp(phar_entry_info *source, phar_entry_info *dest, char **error) /* {{{ */
|
||||
{
|
||||
phar_entry_info *link;
|
||||
|
||||
|
@ -737,7 +836,7 @@ static void phar_set_fp_type(phar_entry_info *entry, enum phar_fp_type type, zen
|
|||
|
||||
/* open and decompress a compressed phar entry
|
||||
*/
|
||||
int phar_open_entry_fp(phar_entry_info *entry, char **error, int follow_links) /* {{{ */
|
||||
zend_result phar_open_entry_fp(phar_entry_info *entry, char **error, int follow_links) /* {{{ */
|
||||
{
|
||||
php_stream_filter *filter;
|
||||
phar_archive_data *phar = entry->phar;
|
||||
|
@ -853,105 +952,6 @@ int phar_open_entry_fp(phar_entry_info *entry, char **error, int follow_links) /
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
int phar_create_writeable_entry(phar_archive_data *phar, phar_entry_info *entry, char **error) /* {{{ */
|
||||
{
|
||||
if (entry->fp_type == PHAR_MOD) {
|
||||
/* already newly created, truncate */
|
||||
php_stream_truncate_set_size(entry->fp, 0);
|
||||
|
||||
entry->old_flags = entry->flags;
|
||||
entry->is_modified = 1;
|
||||
phar->is_modified = 1;
|
||||
/* reset file size */
|
||||
entry->uncompressed_filesize = 0;
|
||||
entry->compressed_filesize = 0;
|
||||
entry->crc32 = 0;
|
||||
entry->flags = PHAR_ENT_PERM_DEF_FILE;
|
||||
entry->fp_type = PHAR_MOD;
|
||||
entry->offset = 0;
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (error) {
|
||||
*error = NULL;
|
||||
}
|
||||
|
||||
/* open a new temp file for writing */
|
||||
if (entry->link) {
|
||||
efree(entry->link);
|
||||
entry->link = NULL;
|
||||
entry->tar_type = (entry->is_tar ? TAR_FILE : '\0');
|
||||
}
|
||||
|
||||
entry->fp = php_stream_fopen_tmpfile();
|
||||
|
||||
if (!entry->fp) {
|
||||
if (error) {
|
||||
spprintf(error, 0, "phar error: unable to create temporary file");
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
entry->old_flags = entry->flags;
|
||||
entry->is_modified = 1;
|
||||
phar->is_modified = 1;
|
||||
/* reset file size */
|
||||
entry->uncompressed_filesize = 0;
|
||||
entry->compressed_filesize = 0;
|
||||
entry->crc32 = 0;
|
||||
entry->flags = PHAR_ENT_PERM_DEF_FILE;
|
||||
entry->fp_type = PHAR_MOD;
|
||||
entry->offset = 0;
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
int phar_separate_entry_fp(phar_entry_info *entry, char **error) /* {{{ */
|
||||
{
|
||||
php_stream *fp;
|
||||
phar_entry_info *link;
|
||||
|
||||
if (FAILURE == phar_open_entry_fp(entry, error, 1)) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
if (entry->fp_type == PHAR_MOD) {
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
fp = php_stream_fopen_tmpfile();
|
||||
if (fp == NULL) {
|
||||
spprintf(error, 0, "phar error: unable to create temporary file");
|
||||
return FAILURE;
|
||||
}
|
||||
phar_seek_efp(entry, 0, SEEK_SET, 0, 1);
|
||||
link = phar_get_link_source(entry);
|
||||
|
||||
if (!link) {
|
||||
link = entry;
|
||||
}
|
||||
|
||||
if (SUCCESS != php_stream_copy_to_stream_ex(phar_get_efp(link, 0), fp, link->uncompressed_filesize, NULL)) {
|
||||
if (error) {
|
||||
spprintf(error, 4096, "phar error: cannot separate entry file \"%s\" contents in phar archive \"%s\" for write access", entry->filename, entry->phar->fname);
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
if (entry->link) {
|
||||
efree(entry->link);
|
||||
entry->link = NULL;
|
||||
entry->tar_type = (entry->is_tar ? TAR_FILE : '\0');
|
||||
}
|
||||
|
||||
entry->offset = 0;
|
||||
entry->fp = fp;
|
||||
entry->fp_type = PHAR_MOD;
|
||||
entry->is_modified = 1;
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/**
|
||||
* helper function to open an internal file's fp just-in-time
|
||||
*/
|
||||
|
@ -972,7 +972,7 @@ phar_entry_info * phar_open_jit(phar_archive_data *phar, phar_entry_info *entry,
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
PHP_PHAR_API int phar_resolve_alias(char *alias, size_t alias_len, char **filename, size_t *filename_len) /* {{{ */ {
|
||||
PHP_PHAR_API zend_result phar_resolve_alias(char *alias, size_t alias_len, char **filename, size_t *filename_len) /* {{{ */ {
|
||||
phar_archive_data *fd_ptr;
|
||||
if (HT_IS_INITIALIZED(&PHAR_G(phar_alias_map))
|
||||
&& NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len))) {
|
||||
|
@ -984,7 +984,7 @@ PHP_PHAR_API int phar_resolve_alias(char *alias, size_t alias_len, char **filena
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
int phar_free_alias(phar_archive_data *phar, char *alias, size_t alias_len) /* {{{ */
|
||||
zend_result phar_free_alias(phar_archive_data *phar, char *alias, size_t alias_len) /* {{{ */
|
||||
{
|
||||
if (phar->refcount || phar->is_persistent) {
|
||||
return FAILURE;
|
||||
|
@ -1007,7 +1007,7 @@ int phar_free_alias(phar_archive_data *phar, char *alias, size_t alias_len) /* {
|
|||
* Looks up a phar archive in the filename map, connecting it to the alias
|
||||
* (if any) or returns null
|
||||
*/
|
||||
int phar_get_archive(phar_archive_data **archive, char *fname, size_t fname_len, char *alias, size_t alias_len, char **error) /* {{{ */
|
||||
zend_result phar_get_archive(phar_archive_data **archive, char *fname, size_t fname_len, char *alias, size_t alias_len, char **error) /* {{{ */
|
||||
{
|
||||
phar_archive_data *fd, *fd_ptr;
|
||||
char *my_realpath, *save;
|
||||
|
@ -1537,7 +1537,7 @@ static int phar_call_openssl_signverify(int is_sign, php_stream *fp, zend_off_t
|
|||
/* }}} */
|
||||
#endif /* #ifndef PHAR_HAVE_OPENSSL */
|
||||
|
||||
int phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type, char *sig, size_t sig_len, char *fname, char **signature, size_t *signature_len, char **error) /* {{{ */
|
||||
zend_result phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type, char *sig, size_t sig_len, char *fname, char **signature, size_t *signature_len, char **error) /* {{{ */
|
||||
{
|
||||
size_t read_size, len;
|
||||
zend_off_t read_len;
|
||||
|
@ -1851,7 +1851,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type,
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
int phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signature, size_t *signature_length, char **error) /* {{{ */
|
||||
zend_result phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signature, size_t *signature_length, char **error) /* {{{ */
|
||||
{
|
||||
unsigned char buf[1024];
|
||||
size_t sig_len;
|
||||
|
@ -2134,7 +2134,7 @@ static void phar_copy_cached_phar(phar_archive_data **pphar) /* {{{ */
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
int phar_copy_on_write(phar_archive_data **pphar) /* {{{ */
|
||||
zend_result phar_copy_on_write(phar_archive_data **pphar) /* {{{ */
|
||||
{
|
||||
zval zv, *pzv;
|
||||
phar_archive_data *newpphar;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue