Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions ext/phar/phar.c
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,8 @@ bool phar_archive_delref(phar_archive_data *phar) /* {{{ */
} else if (!phar->refcount) {
/* invalidate phar cache */
PHAR_G(last_phar) = NULL;
PHAR_G(last_phar_name) = PHAR_G(last_alias) = NULL;
PHAR_G(last_alias) = NULL;
PHAR_G(last_phar_name) = NULL;

/* This is a new phar that has perhaps had an alias/metadata set, but has never been flushed. */
bool remove_fname_cache = !zend_hash_num_elements(&phar->manifest);
Expand Down Expand Up @@ -1263,7 +1264,7 @@ static zend_result phar_parse_pharfile(php_stream *fp, char *fname, size_t fname
}

if (NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len))) {
if (SUCCESS != phar_free_alias(fd_ptr, alias, alias_len)) {
if (SUCCESS != phar_free_alias(fd_ptr)) {
signature = NULL;
fp = NULL;
MAPPHAR_FAIL("Cannot open archive \"%s\", alias is already in use by existing archive");
Expand Down Expand Up @@ -1462,7 +1463,7 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 7, 8) zend_result phar_create_or_parse_filename(c
phar_archive_data *fd_ptr;

if (alias && NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len))) {
if (SUCCESS != phar_free_alias(fd_ptr, alias, alias_len)) {
if (SUCCESS != phar_free_alias(fd_ptr)) {
spprintf(error, 4096, "phar error: phar \"%s\" cannot set alias \"%s\", already in use by another phar archive", mydata->fname, alias);

zend_hash_str_del(&(PHAR_G(phar_fname_map)), mydata->fname, fname_len);
Expand Down Expand Up @@ -3333,7 +3334,8 @@ void phar_request_initialize(void) /* {{{ */
if (!PHAR_G(request_init))
{
PHAR_G(last_phar) = NULL;
PHAR_G(last_phar_name) = PHAR_G(last_alias) = NULL;
PHAR_G(last_alias) = NULL;
PHAR_G(last_phar_name) = NULL;
PHAR_G(has_bz2) = zend_hash_str_exists(&module_registry, "bz2", sizeof("bz2")-1);
PHAR_G(has_zlib) = zend_hash_str_exists(&module_registry, "zlib", sizeof("zlib")-1);
PHAR_G(request_init) = 1;
Expand Down
20 changes: 10 additions & 10 deletions ext/phar/phar_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ ZEND_BEGIN_MODULE_GLOBALS(phar)
char* last_phar_name;
uint32_t last_phar_name_len;
uint32_t last_alias_len;
char* last_alias;
const char* last_alias;
phar_archive_data* last_phar;
HashTable mime_types;
ZEND_END_MODULE_GLOBALS(phar)
Expand Down Expand Up @@ -398,7 +398,7 @@ static inline void phar_set_inode(phar_entry_info *entry) /* {{{ */
}
/* }}} */

static inline bool phar_entry_can_remove(phar_entry_info *entry)
static inline bool phar_entry_can_remove(const phar_entry_info *entry)
{
return entry->fp_refcount == 0 && entry->fileinfo_lock_count == 0;
}
Expand All @@ -413,9 +413,9 @@ zend_result phar_open_from_filename(char *fname, size_t fname_len, char *alias,
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 7, 8) 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_ATTRIBUTE_NONNULL_ARGS(1, 7, 8) 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_ATTRIBUTE_NONNULL_ARGS(3) 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_free_alias(const phar_archive_data *phar);
zend_result phar_get_archive(phar_archive_data **archive, const char *fname, size_t fname_len, const 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, const char *fname, char **signature, size_t *signature_len, char **error);
ZEND_ATTRIBUTE_NONNULL zend_result phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signature, size_t *signature_length, char **error);

/* utility functions */
Expand All @@ -424,8 +424,8 @@ const char *phar_decompress_filter(const phar_entry_info *entry, bool return_unk
const char *phar_compress_filter(const phar_entry_info *entry, bool 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);
zend_result phar_mount_entry(phar_archive_data *phar, char *filename, size_t filename_len, char *path, size_t path_len);
void phar_add_virtual_dirs(phar_archive_data *phar, const char *filename, size_t filename_len);
zend_result phar_mount_entry(phar_archive_data *phar, const 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);
zend_string* phar_fix_filepath(const char *path, size_t path_length, bool use_cwd);
ZEND_ATTRIBUTE_NONNULL phar_entry_info * phar_open_jit(const phar_archive_data *phar, phar_entry_info *entry, char **error);
Expand All @@ -448,12 +448,12 @@ zend_result phar_copy_on_write(phar_archive_data **pphar);

/* tar functions in tar.c */
bool phar_is_tar(const char *buf, const char *fname);
zend_result phar_parse_tarfile(php_stream* fp, char *fname, size_t fname_len, char *alias, size_t alias_len, phar_archive_data** pphar, uint32_t compression, char **error);
zend_result phar_parse_tarfile(php_stream* fp, const char *fname, size_t fname_len, const char *alias, size_t alias_len, phar_archive_data** pphar, uint32_t compression, char **error);
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 7, 8) zend_result phar_open_or_create_tar(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_ATTRIBUTE_NONNULL_ARGS(1, 4) int phar_tar_flush(phar_archive_data *phar, zend_string *user_stub, bool is_default_stub, char **error);

/* zip functions in zip.c */
zend_result phar_parse_zipfile(php_stream *fp, char *fname, size_t fname_len, char *alias, size_t alias_len, phar_archive_data** pphar, char **error);
zend_result phar_parse_zipfile(php_stream *fp, const char *fname, size_t fname_len, const char *alias, size_t alias_len, phar_archive_data** pphar, char **error);
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 7, 8) zend_result phar_open_or_create_zip(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_ATTRIBUTE_NONNULL_ARGS(1, 4) int phar_zip_flush(phar_archive_data *archive, zend_string *user_stub, bool is_default_stub, char **error);

Expand All @@ -470,7 +470,7 @@ 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, bool security);
phar_entry_info *phar_get_entry_info_dir(phar_archive_data *phar, char *path, size_t path_len, char dir, char **error, bool security);
ZEND_ATTRIBUTE_NONNULL 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, bool security, uint32_t timestamp);
ZEND_ATTRIBUTE_NONNULL 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, bool security);
ZEND_ATTRIBUTE_NONNULL zend_result phar_get_entry_data(phar_entry_data **ret, const char *fname, size_t fname_len, char *path, size_t path_len, const char *mode, char allow_dir, char **error, bool security);
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 4) int phar_flush_ex(phar_archive_data *archive, zend_string *user_stub, bool is_default_stub, char **error);
ZEND_ATTRIBUTE_NONNULL int phar_flush(phar_archive_data *archive, char **error);
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, bool is_complete);
Expand Down
11 changes: 7 additions & 4 deletions ext/phar/phar_object.c
Original file line number Diff line number Diff line change
Expand Up @@ -1313,7 +1313,8 @@ PHP_METHOD(Phar, unlinkArchive)

/* invalidate phar cache */
PHAR_G(last_phar) = NULL;
PHAR_G(last_phar_name) = PHAR_G(last_alias) = NULL;
PHAR_G(last_alias) = NULL;
PHAR_G(last_phar_name) = NULL;

phar_archive_delref(phar);
unlink(fname);
Expand Down Expand Up @@ -2216,7 +2217,8 @@ static zend_object *phar_convert_to_other(phar_archive_data *source, int convert

/* invalidate phar cache */
PHAR_G(last_phar) = NULL;
PHAR_G(last_phar_name) = PHAR_G(last_alias) = NULL;
PHAR_G(last_alias) = NULL;
PHAR_G(last_phar_name) = NULL;

php_stream *tmp_fp = php_stream_fopen_tmpfile();
if (tmp_fp == NULL) {
Expand Down Expand Up @@ -2688,7 +2690,8 @@ PHP_METHOD(Phar, setAlias)

/* invalidate phar cache */
PHAR_G(last_phar) = NULL;
PHAR_G(last_phar_name) = PHAR_G(last_alias) = NULL;
PHAR_G(last_alias) = NULL;
PHAR_G(last_phar_name) = NULL;

if (phar_obj->archive->is_data) {
if (phar_obj->archive->is_tar) {
Expand All @@ -2705,7 +2708,7 @@ PHP_METHOD(Phar, setAlias)
RETURN_TRUE;
}
if (NULL != (fd_ptr = zend_hash_find_ptr(&(PHAR_G(phar_alias_map)), new_alias))) {
if (SUCCESS != phar_free_alias(fd_ptr, ZSTR_VAL(new_alias), ZSTR_LEN(new_alias))) {
if (SUCCESS != phar_free_alias(fd_ptr)) {
zend_throw_exception_ex(phar_ce_PharException, 0, "alias \"%s\" is already used for archive \"%s\" and cannot be used for other archives", ZSTR_VAL(new_alias), fd_ptr->fname);
RETURN_THROWS();
}
Expand Down
6 changes: 3 additions & 3 deletions ext/phar/tar.c
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ static zend_result phar_tar_process_metadata(phar_entry_info *entry, php_stream
}
/* }}} */

zend_result phar_parse_tarfile(php_stream* fp, char *fname, size_t fname_len, char *alias, size_t alias_len, phar_archive_data** pphar, uint32_t compression, char **error) /* {{{ */
zend_result phar_parse_tarfile(php_stream* fp, const char *fname, size_t fname_len, const char *alias, size_t alias_len, phar_archive_data** pphar, uint32_t compression, char **error) /* {{{ */
{
char buf[512], *actual_alias = NULL, *p;
phar_entry_info entry = {0};
Expand Down Expand Up @@ -663,7 +663,7 @@ zend_result phar_parse_tarfile(php_stream* fp, char *fname, size_t fname_len, ch
myphar->is_temporary_alias = 0;

if (NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), actual_alias, myphar->alias_len))) {
if (SUCCESS != phar_free_alias(fd_ptr, actual_alias, myphar->alias_len)) {
if (SUCCESS != phar_free_alias(fd_ptr)) {
if (error) {
spprintf(error, 4096, "phar error: Unable to add tar-based phar \"%s\", alias is already in use", fname);
}
Expand All @@ -678,7 +678,7 @@ zend_result phar_parse_tarfile(php_stream* fp, char *fname, size_t fname_len, ch

if (alias_len) {
if (NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len))) {
if (SUCCESS != phar_free_alias(fd_ptr, alias, alias_len)) {
if (SUCCESS != phar_free_alias(fd_ptr)) {
if (error) {
spprintf(error, 4096, "phar error: Unable to add tar-based phar \"%s\", alias is already in use", fname);
}
Expand Down
40 changes: 21 additions & 19 deletions ext/phar/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
#include <openssl/ssl.h>
#include <openssl/pkcs12.h>
#else
static zend_result phar_call_openssl_signverify(bool is_sign, php_stream *fp, zend_off_t end, char *key, size_t key_len, char **signature, size_t *signature_len, uint32_t sig_type);
static zend_result phar_call_openssl_signverify(bool is_sign, php_stream *fp, zend_off_t end, const char *key, size_t key_len, char **signature, size_t *signature_len, uint32_t sig_type);
#endif

/* for links to relative location, prepend cwd of the entry */
Expand Down Expand Up @@ -188,7 +188,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 */
zend_result 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, const char *filename, size_t filename_len, char *path, size_t path_len) /* {{{ */
{
phar_entry_info entry = {0};
php_stream_statbuf ssb;
Expand Down Expand Up @@ -462,7 +462,7 @@ ZEND_ATTRIBUTE_NONNULL static zend_result phar_separate_entry_fp(phar_entry_info
* 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
*/
ZEND_ATTRIBUTE_NONNULL 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, bool security) /* {{{ */
ZEND_ATTRIBUTE_NONNULL zend_result phar_get_entry_data(phar_entry_data **ret, const char *fname, size_t fname_len, char *path, size_t path_len, const char *mode, char allow_dir, char **error, bool security) /* {{{ */
{
phar_archive_data *phar;
phar_entry_info *entry;
Expand Down Expand Up @@ -929,7 +929,7 @@ ZEND_ATTRIBUTE_NONNULL phar_entry_info * phar_open_jit(const phar_archive_data *
}
/* }}} */

zend_result phar_free_alias(phar_archive_data *phar, char *alias, size_t alias_len) /* {{{ */
zend_result phar_free_alias(const phar_archive_data *phar) /* {{{ */
{
if (phar->refcount || phar->is_persistent) {
return FAILURE;
Expand All @@ -942,7 +942,8 @@ zend_result phar_free_alias(phar_archive_data *phar, char *alias, size_t alias_l

/* invalidate phar cache */
PHAR_G(last_phar) = NULL;
PHAR_G(last_phar_name) = PHAR_G(last_alias) = NULL;
PHAR_G(last_alias) = NULL;
PHAR_G(last_phar_name) = NULL;

return SUCCESS;
}
Expand All @@ -952,11 +953,10 @@ zend_result phar_free_alias(phar_archive_data *phar, char *alias, size_t alias_l
* Looks up a phar archive in the filename map, connecting it to the alias
* (if any) or returns null
*/
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_get_archive(phar_archive_data **archive, const char *fname, size_t fname_len, const char *alias, size_t alias_len, char **error) /* {{{ */
{
phar_archive_data *fd, *fd_ptr;
char *my_realpath, *save;
size_t save_len;
char *my_realpath;

phar_request_initialize();

Expand Down Expand Up @@ -1003,7 +1003,7 @@ zend_result phar_get_archive(phar_archive_data **archive, char *fname, size_t fn
if (error) {
spprintf(error, 0, "alias \"%s\" is already used for archive \"%s\" cannot be overloaded with \"%s\"", alias, fd_ptr->fname, fname);
}
if (SUCCESS == phar_free_alias(fd_ptr, alias, alias_len)) {
if (SUCCESS == phar_free_alias(fd_ptr)) {
if (error) {
efree(*error);
*error = NULL;
Expand All @@ -1029,8 +1029,8 @@ zend_result phar_get_archive(phar_archive_data **archive, char *fname, size_t fn
}

my_realpath = NULL;
save = fname;
save_len = fname_len;
const char *save = fname;
size_t save_len = fname_len;

if (fname && fname_len) {
if (NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), fname, fname_len))) {
Expand Down Expand Up @@ -1113,14 +1113,15 @@ zend_result phar_get_archive(phar_archive_data **archive, char *fname, size_t fn
my_realpath = expand_filepath(fname, my_realpath);

if (my_realpath) {
fname_len = strlen(my_realpath);
size_t my_realpath_len = strlen(my_realpath);
#ifdef PHP_WIN32
phar_unixify_path_separators(my_realpath, my_realpath_len);
#endif
fname_len = my_realpath_len;
fname = my_realpath;
} else {
return FAILURE;
}
#ifdef PHP_WIN32
phar_unixify_path_separators(fname, fname_len);
#endif

if (NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), fname, fname_len))) {
realpath_success:
Expand Down Expand Up @@ -1382,7 +1383,7 @@ static int phar_hex_str(const char *digest, size_t digest_len, char **signature)
/* }}} */

#ifndef PHAR_HAVE_OPENSSL
static zend_result phar_call_openssl_signverify(bool is_sign, php_stream *fp, zend_off_t end, char *key, size_t key_len, char **signature, size_t *signature_len, uint32_t sig_type) /* {{{ */
static zend_result phar_call_openssl_signverify(bool is_sign, php_stream *fp, zend_off_t end, const char *key, size_t key_len, char **signature, size_t *signature_len, uint32_t sig_type) /* {{{ */
{
zval retval, zp[4];
zend_string *str;
Expand Down Expand Up @@ -1473,7 +1474,7 @@ static zend_result phar_call_openssl_signverify(bool is_sign, php_stream *fp, ze
/* }}} */
#endif /* #ifndef PHAR_HAVE_OPENSSL */

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_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type, char *sig, size_t sig_len, const char *fname, char **signature, size_t *signature_len, char **error) /* {{{ */
{
size_t read_size, len;
zend_off_t read_len;
Expand Down Expand Up @@ -1959,7 +1960,7 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_create_signature(phar_archive_data *phar
/* }}} */

// TODO: convert this to zend_string too
void phar_add_virtual_dirs(phar_archive_data *phar, char *filename, size_t filename_len) /* {{{ */
void phar_add_virtual_dirs(phar_archive_data *phar, const char *filename, size_t filename_len) /* {{{ */
{
const char *s;
zend_string *str;
Expand Down Expand Up @@ -2074,7 +2075,8 @@ zend_result phar_copy_on_write(phar_archive_data **pphar) /* {{{ */
newpphar = Z_PTR_P(pzv);
/* invalidate phar cache */
PHAR_G(last_phar) = NULL;
PHAR_G(last_phar_name) = PHAR_G(last_alias) = NULL;
PHAR_G(last_alias) = NULL;
PHAR_G(last_phar_name) = NULL;

if (newpphar->alias_len && NULL == zend_hash_str_add_ptr(&(PHAR_G(phar_alias_map)), newpphar->alias, newpphar->alias_len, newpphar)) {
zend_hash_str_del(&(PHAR_G(phar_fname_map)), (*pphar)->fname, (*pphar)->fname_len);
Expand Down
8 changes: 4 additions & 4 deletions ext/phar/zip.c
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ static char *phar_find_eocd(const char *s, size_t n)
* This is used by phar_open_from_fp to process a zip-based phar, but can be called
* directly.
*/
zend_result phar_parse_zipfile(php_stream *fp, char *fname, size_t fname_len, char *alias, size_t alias_len, phar_archive_data** pphar, char **error) /* {{{ */
zend_result phar_parse_zipfile(php_stream *fp, const char *fname, size_t fname_len, const char *alias, size_t alias_len, phar_archive_data** pphar, char **error) /* {{{ */
{
phar_zip_dir_end locator;
char buf[sizeof(locator) + 65536];
Expand Down Expand Up @@ -740,7 +740,7 @@ zend_result phar_parse_zipfile(php_stream *fp, char *fname, size_t fname_len, ch
mydata->is_temporary_alias = 0;

if (NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), actual_alias, mydata->alias_len))) {
if (SUCCESS != phar_free_alias(fd_ptr, actual_alias, mydata->alias_len)) {
if (SUCCESS != phar_free_alias(fd_ptr)) {
if (error) {
spprintf(error, 4096, "phar error: Unable to add zip-based phar \"%s\" with implicit alias, alias is already in use", fname);
}
Expand All @@ -762,7 +762,7 @@ zend_result phar_parse_zipfile(php_stream *fp, char *fname, size_t fname_len, ch

if (alias_len) {
if (NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len))) {
if (SUCCESS != phar_free_alias(fd_ptr, alias, alias_len)) {
if (SUCCESS != phar_free_alias(fd_ptr)) {
if (error) {
spprintf(error, 4096, "phar error: Unable to add zip-based phar \"%s\" with explicit alias, alias is already in use", fname);
}
Expand Down Expand Up @@ -1279,7 +1279,7 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 4) int phar_zip_flush(phar_archive_data *phar, ze

/* set stub */
if (user_stub && !is_default_stub) {
char *pos = php_stristr(ZSTR_VAL(user_stub), halt_stub, ZSTR_LEN(user_stub), strlen(halt_stub));
const char *pos = php_stristr(ZSTR_VAL(user_stub), halt_stub, ZSTR_LEN(user_stub), strlen(halt_stub));

if (pos == NULL) {
spprintf(error, 0, "illegal stub for zip-based phar \"%s\"", phar->fname);
Expand Down
Loading