diff options
Diffstat (limited to 'ext/phar')
58 files changed, 417 insertions, 551 deletions
diff --git a/ext/phar/LICENSE b/ext/phar/LICENSE index 50770e3a03..a683822b74 100644 --- a/ext/phar/LICENSE +++ b/ext/phar/LICENSE @@ -1,6 +1,6 @@ -------------------------------------------------------------------- The PHP License, version 3.01 -Copyright (c) 1999 - 2005 The PHP Group. All rights reserved. +Copyright (c) 1999 - 2018 The PHP Group. All rights reserved. -------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without diff --git a/ext/phar/Makefile.frag b/ext/phar/Makefile.frag index e58795deea..0e3713fc63 100644 --- a/ext/phar/Makefile.frag +++ b/ext/phar/Makefile.frag @@ -1,5 +1,10 @@ $(srcdir)/phar_path_check.c: $(srcdir)/phar_path_check.re - @(cd $(top_srcdir); $(RE2C) --no-generation-date -b -o ext/phar/phar_path_check.c ext/phar/phar_path_check.re) + @(cd $(top_srcdir); \ + if test -f ./php_phar.h; then \ + $(RE2C) --no-generation-date -b -o phar_path_check.c phar_path_check.re; \ + else \ + $(RE2C) --no-generation-date -b -o ext/phar/phar_path_check.c ext/phar/phar_path_check.re; \ + fi) pharcmd: $(builddir)/phar.php $(builddir)/phar.phar diff --git a/ext/phar/dirstream.c b/ext/phar/dirstream.c index d81f6939bc..36c7f9e812 100644 --- a/ext/phar/dirstream.c +++ b/ext/phar/dirstream.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar:// stream wrapper support | +----------------------------------------------------------------------+ - | Copyright (c) 2005-2017 The PHP Group | + | Copyright (c) 2005-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -180,7 +180,7 @@ static int phar_compare_dir_name(const void *a, const void *b) /* {{{ */ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest) /* {{{ */ { HashTable *data; - int dirlen = strlen(dir); + size_t dirlen = strlen(dir); char *entry, *found, *save; zend_string *str_key; uint keylen; @@ -199,7 +199,6 @@ static php_stream *phar_make_dirstream(char *dir, HashTable *manifest) /* {{{ */ zend_hash_internal_pointer_reset(manifest); while (FAILURE != zend_hash_has_more_elements(manifest)) { - keylen = 0; if (HASH_KEY_NON_EXISTENT == zend_hash_get_current_key(manifest, &str_key, &unused)) { break; } diff --git a/ext/phar/dirstream.h b/ext/phar/dirstream.h index 52c07753a4..bed1a1dd7f 100644 --- a/ext/phar/dirstream.h +++ b/ext/phar/dirstream.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar php single-file executable PHP extension | +----------------------------------------------------------------------+ - | Copyright (c) 2006-2017 The PHP Group | + | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/phar/func_interceptors.c b/ext/phar/func_interceptors.c index c4c7b6cba8..5f3055d5e8 100644 --- a/ext/phar/func_interceptors.c +++ b/ext/phar/func_interceptors.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar php single-file executable PHP extension | +----------------------------------------------------------------------+ - | Copyright (c) 2005-2017 The PHP Group | + | Copyright (c) 2005-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -200,7 +200,7 @@ phar_it: } if (offset > 0 && php_stream_seek(stream, offset, SEEK_SET) < 0) { - php_error_docref(NULL, E_WARNING, "Failed to seek to position %pd in the stream", offset); + php_error_docref(NULL, E_WARNING, "Failed to seek to position " ZEND_LONG_FMT " in the stream", offset); php_stream_close(stream); RETURN_FALSE; } diff --git a/ext/phar/func_interceptors.h b/ext/phar/func_interceptors.h index 6cf664b8a0..b20e6151b4 100644 --- a/ext/phar/func_interceptors.h +++ b/ext/phar/func_interceptors.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar php single-file executable PHP extension | +----------------------------------------------------------------------+ - | Copyright (c) 2006-2017 The PHP Group | + | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/phar/phar.1.in b/ext/phar/phar.1.in index 613bf0d4ec..26451508fc 100644 --- a/ext/phar/phar.1.in +++ b/ext/phar/phar.1.in @@ -1,4 +1,4 @@ -.TH PHAR 1 "2017" "The PHP Group" "User Commands" +.TH PHAR 1 "2018" "The PHP Group" "User Commands" .SH NAME phar, phar.phar \- PHAR (PHP archive) command line tool .SH SYNOPSIS @@ -507,7 +507,7 @@ contributors all around the world. .SH VERSION INFORMATION This manpage describes \fBphar\fP, version @PHP_VERSION@. .SH COPYRIGHT -Copyright \(co 1997\-2017 The PHP Group +Copyright \(co 1997\-2018 The PHP Group .LP This source file is subject to version 3.01 of the PHP license, that is bundled with this package in the file LICENSE, and is diff --git a/ext/phar/phar.c b/ext/phar/phar.c index 9d91fd26ae..56fa253a6f 100644 --- a/ext/phar/phar.c +++ b/ext/phar/phar.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar php single-file executable PHP extension | +----------------------------------------------------------------------+ - | Copyright (c) 2005-2017 The PHP Group | + | Copyright (c) 2005-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -518,15 +518,15 @@ void phar_entry_remove(phar_entry_data *idata, char **error) /* {{{ */ memcpy(&var, buffer, sizeof(var)); \ buffer += 4 # define PHAR_GET_16(buffer, var) \ - var = *(php_uint16*)(buffer); \ + var = *(uint16_t*)(buffer); \ buffer += 2 #endif -#define PHAR_ZIP_16(var) ((php_uint16)((((php_uint16)var[0]) & 0xff) | \ - (((php_uint16)var[1]) & 0xff) << 8)) -#define PHAR_ZIP_32(var) ((php_uint32)((((php_uint32)var[0]) & 0xff) | \ - (((php_uint32)var[1]) & 0xff) << 8 | \ - (((php_uint32)var[2]) & 0xff) << 16 | \ - (((php_uint32)var[3]) & 0xff) << 24)) +#define PHAR_ZIP_16(var) ((uint16_t)((((uint16_t)var[0]) & 0xff) | \ + (((uint16_t)var[1]) & 0xff) << 8)) +#define PHAR_ZIP_32(var) ((uint32_t)((((uint32_t)var[0]) & 0xff) | \ + (((uint32_t)var[1]) & 0xff) << 8 | \ + (((uint32_t)var[2]) & 0xff) << 16 | \ + (((uint32_t)var[3]) & 0xff) << 24)) /** * Open an already loaded phar @@ -606,7 +606,7 @@ int phar_open_parsed_phar(char *fname, int fname_len, char *alias, int alias_len * * data is the serialized zval */ -int phar_parse_metadata(char **buffer, zval *metadata, php_uint32 zip_metadata_len) /* {{{ */ +int phar_parse_metadata(char **buffer, zval *metadata, uint32_t zip_metadata_len) /* {{{ */ { php_unserialize_data_t var_hash; @@ -651,14 +651,14 @@ int phar_parse_metadata(char **buffer, zval *metadata, php_uint32 zip_metadata_l * This is used by phar_open_from_filename to process the manifest, but can be called * directly. */ -static int phar_parse_pharfile(php_stream *fp, char *fname, int fname_len, char *alias, int alias_len, zend_long halt_offset, phar_archive_data** pphar, php_uint32 compression, char **error) /* {{{ */ +static int phar_parse_pharfile(php_stream *fp, char *fname, int fname_len, char *alias, int alias_len, zend_long halt_offset, phar_archive_data** pphar, uint32_t compression, char **error) /* {{{ */ { char b32[4], *buffer, *endbuffer, *savebuf; phar_archive_data *mydata = NULL; phar_entry_info entry; - php_uint32 manifest_len, manifest_count, manifest_flags, manifest_index, tmp_len, sig_flags; - php_uint16 manifest_ver; - php_uint32 len; + uint32_t manifest_len, manifest_count, manifest_flags, manifest_index, tmp_len, sig_flags; + uint16_t manifest_ver; + uint32_t len; zend_long offset; int sig_len, register_alias = 0, temp_alias = 0; char *signature = NULL; @@ -780,7 +780,7 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, int fname_len, char switch(sig_flags) { case PHAR_SIG_OPENSSL: { - php_uint32 signature_len; + uint32_t signature_len; char *sig; zend_off_t whence; @@ -1031,7 +1031,7 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, int fname_len, char PHAR_GET_32(buffer, len); } } - if(len > endbuffer - buffer) { + if(len > (size_t)(endbuffer - buffer)) { MAPPHAR_FAIL("internal corruption of phar \"%s\" (trying to read past buffer end)"); } if (phar_parse_metadata(&buffer, &mydata->metadata, len) == FAILURE) { @@ -1072,7 +1072,7 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, int fname_len, char entry.manifest_pos = manifest_index; } - if (entry.filename_len > endbuffer - buffer - 24) { + if (entry.filename_len > (size_t)(endbuffer - buffer - 24)) { MAPPHAR_FAIL("internal corruption of phar \"%s\" (truncated manifest entry)"); } @@ -1114,7 +1114,7 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, int fname_len, char } else { entry.metadata_len = 0; } - if (len > endbuffer - buffer) { + if (len > (size_t)(endbuffer - buffer)) { pefree(entry.filename, entry.is_persistent); MAPPHAR_FAIL("internal corruption of phar \"%s\" (truncated manifest entry)"); } @@ -1327,11 +1327,6 @@ int phar_create_or_parse_filename(char *fname, int fname_len, char *alias, int a if (!pphar) { pphar = &mydata; } -#if PHP_API_VERSION < 20100412 - if (PG(safe_mode) && (!php_checkuid(fname, NULL, CHECKUID_ALLOW_ONLY_FILE))) { - return FAILURE; - } -#endif if (php_check_open_basedir(fname)) { return FAILURE; } @@ -1491,11 +1486,6 @@ int phar_open_from_filename(char *fname, int fname_len, char *alias, int alias_l } else if (error && *error) { return FAILURE; } -#if PHP_API_VERSION < 20100412 - if (PG(safe_mode) && (!php_checkuid(fname, NULL, CHECKUID_ALLOW_ONLY_FILE))) { - return FAILURE; - } -#endif if (php_check_open_basedir(fname)) { return FAILURE; } @@ -1576,7 +1566,7 @@ static int phar_open_from_fp(php_stream* fp, char *fname, int fname_len, char *a const zend_long tokenlen = sizeof(token) - 1; zend_long halt_offset; size_t got; - php_uint32 compression = PHAR_FILE_COMPRESSED_NONE; + uint32_t compression = PHAR_FILE_COMPRESSED_NONE; if (error) { *error = NULL; @@ -1845,7 +1835,7 @@ static int phar_check_str(const char *fname, const char *ext_str, int ext_len, i char test[51]; const char *pos; - if (ext_len >= 50) { + if (ext_len < 0 || ext_len >= 50) { return FAILURE; } @@ -2297,13 +2287,6 @@ int phar_open_executed_filename(char *alias, int alias_len, char **error) /* {{{ return FAILURE; } - -#if PHP_API_VERSION < 20100412 - if (PG(safe_mode) && (!php_checkuid(fname, NULL, CHECKUID_ALLOW_ONLY_FILE))) { - return FAILURE; - } -#endif - if (php_check_open_basedir(fname)) { return FAILURE; } @@ -2338,9 +2321,9 @@ int phar_open_executed_filename(char *alias, int alias_len, char **error) /* {{{ /** * Validate the CRC32 of a file opened from within the phar */ -int phar_postprocess_file(phar_entry_data *idata, php_uint32 crc32, char **error, int process_zip) /* {{{ */ +int phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error, int process_zip) /* {{{ */ { - php_uint32 crc = ~0; + uint32_t crc = ~0; int len = idata->internal_file->uncompressed_filesize; php_stream *fp = idata->fp; phar_entry_info *entry = idata->internal_file; @@ -2505,8 +2488,8 @@ int phar_flush(phar_archive_data *phar, char *user_stub, zend_long len, int conv zend_off_t manifest_ftell; zend_long offset; size_t wrote; - php_uint32 manifest_len, mytime, loc, new_manifest_count; - php_uint32 newcrc32; + uint32_t manifest_len, mytime, loc, new_manifest_count; + uint32_t newcrc32; php_stream *file, *oldfile, *newfile, *stubfile; php_stream_filter *filter; php_serialize_data_t metadata_hash; @@ -2838,7 +2821,7 @@ int phar_flush(phar_archive_data *phar, char *user_stub, zend_long len, int conv php_stream_flush(entry->cfp); php_stream_filter_remove(filter, 1); php_stream_seek(entry->cfp, 0, SEEK_END); - entry->compressed_filesize = (php_uint32) php_stream_tell(entry->cfp); + entry->compressed_filesize = (uint32_t) php_stream_tell(entry->cfp); /* generate crc on compressed file */ php_stream_rewind(entry->cfp); entry->old_flags = entry->flags; @@ -3505,7 +3488,7 @@ void phar_request_initialize(void) /* {{{ */ PHP_RSHUTDOWN_FUNCTION(phar) /* {{{ */ { - int i; + uint32_t i; PHAR_G(request_ends) = 1; @@ -3607,9 +3590,7 @@ static const zend_module_dep phar_deps[] = { #if defined(HAVE_HASH) && !defined(COMPILE_DL_HASH) ZEND_MOD_REQUIRED("hash") #endif -#if HAVE_SPL ZEND_MOD_REQUIRED("spl") -#endif ZEND_MOD_END }; diff --git a/ext/phar/phar_internal.h b/ext/phar/phar_internal.h index c16c6b218e..14a7e6007e 100644 --- a/ext/phar/phar_internal.h +++ b/ext/phar/phar_internal.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar php single-file executable PHP extension | +----------------------------------------------------------------------+ - | Copyright (c) 2006-2017 The PHP Group | + | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -55,13 +55,11 @@ #include "TSRM/tsrm_strtok_r.h" #endif #include "Zend/zend_virtual_cwd.h" -#if HAVE_SPL #include "ext/spl/spl_array.h" #include "ext/spl/spl_directory.h" #include "ext/spl/spl_engine.h" #include "ext/spl/spl_exceptions.h" #include "ext/spl/spl_iterators.h" -#endif #include "php_phar.h" #ifdef PHAR_HASH_OK #include "ext/hash/php_hash.h" @@ -201,19 +199,10 @@ ZEND_EXTERN_MODULE_GLOBALS(phar) ZEND_TSRMLS_CACHE_EXTERN() #endif -#ifndef php_uint16 -# if SIZEOF_SHORT == 2 -# define php_uint16 unsigned short -# else -# define php_uint16 uint16_t -# endif -#endif #include "pharzip.h" -#if HAVE_SPL typedef union _phar_archive_object phar_archive_object; typedef union _phar_entry_object phar_entry_object; -#endif /* * used in phar_entry_info->fp_type to @@ -233,17 +222,17 @@ enum phar_fp_type { /* entry for one file in a phar file */ typedef struct _phar_entry_info { /* first bytes are exactly as in file */ - php_uint32 uncompressed_filesize; - php_uint32 timestamp; - php_uint32 compressed_filesize; - php_uint32 crc32; - php_uint32 flags; + uint32_t uncompressed_filesize; + uint32_t timestamp; + uint32_t compressed_filesize; + uint32_t crc32; + uint32_t flags; /* remainder */ /* when changing compression, save old flags in case fp is NULL */ - php_uint32 old_flags; + uint32_t old_flags; zval metadata; int metadata_len; /* only used for cached manifests */ - php_uint32 filename_len; + uint32_t filename_len; char *filename; enum phar_fp_type fp_type; /* offset within original phar file of the file contents */ @@ -299,14 +288,14 @@ struct _phar_archive_data { HashTable virtual_dirs; /* hash of mounted directory paths */ HashTable mounted_dirs; - php_uint32 flags; - php_uint32 min_timestamp; - php_uint32 max_timestamp; + uint32_t flags; + uint32_t min_timestamp; + uint32_t max_timestamp; php_stream *fp; /* decompressed file contents are stored here */ php_stream *ufp; int refcount; - php_uint32 sig_flags; + uint32_t sig_flags; int sig_len; char *signature; zval metadata; @@ -473,21 +462,17 @@ typedef struct _phar_entry_data { phar_entry_info *internal_file; } phar_entry_data; -#if HAVE_SPL /* archive php object */ union _phar_archive_object { spl_filesystem_object spl; phar_archive_data *archive; }; -#endif -#if HAVE_SPL /* entry php object */ union _phar_entry_object { spl_filesystem_object spl; phar_entry_info *entry; }; -#endif #ifndef PHAR_MAIN extern zend_string *(*phar_save_resolve_path)(const char *filename, int filename_len); @@ -544,7 +529,7 @@ void phar_object_init(void); void phar_destroy_phar_data(phar_archive_data *phar); int phar_open_entry_file(phar_archive_data *phar, phar_entry_info *entry, char **error); -int phar_postprocess_file(phar_entry_data *idata, php_uint32 crc32, char **error, int process_zip); +int phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error, int process_zip); int phar_open_from_filename(char *fname, int fname_len, char *alias, int alias_len, int options, phar_archive_data** pphar, char **error); int phar_open_or_create_filename(char *fname, int fname_len, char *alias, int alias_len, int is_data, int options, phar_archive_data** pphar, char **error); int phar_create_or_parse_filename(char *fname, int fname_len, char *alias, int alias_len, int is_data, int options, phar_archive_data** pphar, char **error); @@ -552,7 +537,7 @@ int phar_open_executed_filename(char *alias, int alias_len, char **error); int phar_free_alias(phar_archive_data *phar, char *alias, int alias_len); int phar_get_archive(phar_archive_data **archive, char *fname, int fname_len, char *alias, int alias_len, char **error); int phar_open_parsed_phar(char *fname, int fname_len, char *alias, int alias_len, int is_data, int options, phar_archive_data** pphar, char **error); -int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_type, char *sig, int sig_len, char *fname, char **signature, int *signature_len, char **error); +int phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type, char *sig, int sig_len, char *fname, char **signature, int *signature_len, char **error); int phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signature, int *signature_length, char **error); /* utility functions */ @@ -566,7 +551,7 @@ int phar_mount_entry(phar_archive_data *phar, char *filename, int filename_len, zend_string *phar_find_in_include_path(char *file, int file_len, phar_archive_data **pphar); char *phar_fix_filepath(char *path, int *new_len, int use_cwd); phar_entry_info * phar_open_jit(phar_archive_data *phar, phar_entry_info *entry, char **error); -int phar_parse_metadata(char **buffer, zval *metadata, php_uint32 zip_metadata_len); +int phar_parse_metadata(char **buffer, zval *metadata, uint32_t zip_metadata_len); 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); @@ -580,7 +565,7 @@ int phar_copy_on_write(phar_archive_data **pphar); /* tar functions in tar.c */ int phar_is_tar(char *buf, char *fname); -int phar_parse_tarfile(php_stream* fp, char *fname, int fname_len, char *alias, int alias_len, phar_archive_data** pphar, int is_data, php_uint32 compression, char **error); +int phar_parse_tarfile(php_stream* fp, char *fname, int fname_len, char *alias, int alias_len, phar_archive_data** pphar, int is_data, uint32_t compression, char **error); int phar_open_or_create_tar(char *fname, int fname_len, char *alias, int alias_len, int is_data, int options, phar_archive_data** pphar, char **error); int phar_tar_flush(phar_archive_data *phar, char *user_stub, zend_long len, int defaultstub, char **error); diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index bfbbd1479b..905fcece73 100644 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar php single-file executable PHP extension | +----------------------------------------------------------------------+ - | Copyright (c) 2005-2017 The PHP Group | + | Copyright (c) 2005-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -25,16 +25,7 @@ static zend_class_entry *phar_ce_archive; static zend_class_entry *phar_ce_data; static zend_class_entry *phar_ce_PharException; - -#if HAVE_SPL static zend_class_entry *phar_ce_entry; -#endif - -#if PHP_VERSION_ID >= 50300 -# define PHAR_ARG_INFO -#else -# define PHAR_ARG_INFO static -#endif static int phar_file_type(HashTable *mimes, char *file, char **mime_type) /* {{{ */ { @@ -692,6 +683,7 @@ PHP_METHOD(Phar, webPhar) if (free_pathinfo) { efree(path_info); } + efree(pt); return; } @@ -709,6 +701,7 @@ PHP_METHOD(Phar, webPhar) if (free_pathinfo) { efree(path_info); } + efree(pt); return; } @@ -718,6 +711,7 @@ PHP_METHOD(Phar, webPhar) efree(path_info); } zend_throw_exception_ex(phar_ce_PharException, 0, "phar error: rewrite callback must return a string or false"); + efree(pt); return; } @@ -738,6 +732,7 @@ PHP_METHOD(Phar, webPhar) if (free_pathinfo) { efree(path_info); } + efree(pt); zend_bailout(); return; @@ -745,6 +740,7 @@ PHP_METHOD(Phar, webPhar) if (free_pathinfo) { efree(path_info); } + efree(pt); zend_throw_exception_ex(phar_ce_PharException, 0, "phar error: rewrite callback must return a string or false"); return; @@ -1103,7 +1099,6 @@ PHP_METHOD(Phar, isValidPharFilename) } /* }}} */ -#if HAVE_SPL /** * from spl_directory */ @@ -1136,7 +1131,6 @@ static spl_other_handler phar_spl_foreign_handler = { phar_spl_foreign_dtor, phar_spl_foreign_clone }; -#endif /* HAVE_SPL */ /* {{{ proto void Phar::__construct(string fname [, int flags [, string alias]]) * Construct a Phar archive object @@ -1149,9 +1143,6 @@ static spl_other_handler phar_spl_foreign_handler = { */ PHP_METHOD(Phar, __construct) { -#if !HAVE_SPL - zend_throw_exception_ex(zend_ce_exception, 0, "Cannot instantiate Phar object without SPL extension"); -#else char *fname, *alias = NULL, *error, *arch = NULL, *entry = NULL, *save_fname; size_t fname_len, alias_len = 0; int arch_len, entry_len, is_data; @@ -1279,7 +1270,6 @@ PHP_METHOD(Phar, __construct) phar_obj->spl.info_class = phar_ce_entry; efree(fname); -#endif /* HAVE_SPL */ } /* }}} */ @@ -1368,7 +1358,7 @@ PHP_METHOD(Phar, unlinkArchive) zname_len = (int)strlen(zname); if (zname_len > 7 && !memcmp(zname, "phar://", 7) && SUCCESS == phar_split_fname(zname, zname_len, &arch, &arch_len, &entry, &entry_len, 2, 0)) { - if (arch_len == fname_len && !memcmp(arch, fname, arch_len)) { + if ((size_t)arch_len == fname_len && !memcmp(arch, fname, arch_len)) { zend_throw_exception_ex(phar_ce_PharException, 0, "phar archive \"%s\" cannot be unlinked from within itself", fname); efree(arch); efree(entry); @@ -1401,8 +1391,6 @@ PHP_METHOD(Phar, unlinkArchive) } /* }}} */ -#if HAVE_SPL - #define PHAR_ARCHIVE_OBJECT() \ zval *zobj = getThis(); \ phar_archive_object *phar_obj = (phar_archive_object*)((char*)Z_OBJ_P(zobj) - Z_OBJ_P(zobj)->handlers->offset); \ @@ -1460,7 +1448,7 @@ static int phar_build(zend_object_iterator *iter, void *puser) /* {{{ */ if (!value) { /* failure in get_current_data */ - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %v returned no value", ZSTR_VAL(ce->name)); + zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %s returned no value", ZSTR_VAL(ce->name)); return ZEND_HASH_APPLY_STOP; } @@ -1471,7 +1459,7 @@ static int phar_build(zend_object_iterator *iter, void *puser) /* {{{ */ php_stream_from_zval_no_verify(fp, value); if (!fp) { - zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Iterator %v returned an invalid stream handle", ZSTR_VAL(ce->name)); + zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Iterator %s returned an invalid stream handle", ZSTR_VAL(ce->name)); return ZEND_HASH_APPLY_STOP; } @@ -1485,7 +1473,7 @@ static int phar_build(zend_object_iterator *iter, void *puser) /* {{{ */ if (Z_TYPE(key) != IS_STRING) { zval_dtor(&key); - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %v returned an invalid key (must return a string)", ZSTR_VAL(ce->name)); + zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %s returned an invalid key (must return a string)", ZSTR_VAL(ce->name)); return ZEND_HASH_APPLY_STOP; } @@ -1501,7 +1489,7 @@ static int phar_build(zend_object_iterator *iter, void *puser) /* {{{ */ save = str_key; zval_dtor(&key); } else { - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %v returned an invalid key (must return a string)", ZSTR_VAL(ce->name)); + zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %s returned an invalid key (must return a string)", ZSTR_VAL(ce->name)); return ZEND_HASH_APPLY_STOP; } @@ -1515,7 +1503,7 @@ static int phar_build(zend_object_iterator *iter, void *puser) /* {{{ */ spl_filesystem_object *intern = (spl_filesystem_object*)((char*)Z_OBJ_P(value) - Z_OBJ_P(value)->handlers->offset); if (!base_len) { - zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Iterator %v returns an SplFileInfo object, so base directory must be specified", ZSTR_VAL(ce->name)); + zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Iterator %s returns an SplFileInfo object, so base directory must be specified", ZSTR_VAL(ce->name)); return ZEND_HASH_APPLY_STOP; } @@ -1559,7 +1547,7 @@ static int phar_build(zend_object_iterator *iter, void *puser) /* {{{ */ } /* fall-through */ default: - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %v returned an invalid value (must return a string)", ZSTR_VAL(ce->name)); + zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %s returned an invalid value (must return a string)", ZSTR_VAL(ce->name)); return ZEND_HASH_APPLY_STOP; } @@ -1599,7 +1587,7 @@ phar_spl_fileinfo: } } else { - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %v returned a path \"%s\" that is not in the base directory \"%s\"", ZSTR_VAL(ce->name), fname, base); + zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %s returned a path \"%s\" that is not in the base directory \"%s\"", ZSTR_VAL(ce->name), fname, base); if (save) { efree(save); @@ -1619,7 +1607,7 @@ phar_spl_fileinfo: if (Z_TYPE(key) != IS_STRING) { zval_dtor(&key); - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %v returned an invalid key (must return a string)", ZSTR_VAL(ce->name)); + zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %s returned an invalid key (must return a string)", ZSTR_VAL(ce->name)); return ZEND_HASH_APPLY_STOP; } @@ -1635,28 +1623,13 @@ phar_spl_fileinfo: save = str_key; zval_dtor(&key); } else { - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %v returned an invalid key (must return a string)", ZSTR_VAL(ce->name)); + zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %s returned an invalid key (must return a string)", ZSTR_VAL(ce->name)); return ZEND_HASH_APPLY_STOP; } } -#if PHP_API_VERSION < 20100412 - if (PG(safe_mode) && (!php_checkuid(fname, NULL, CHECKUID_ALLOW_ONLY_FILE))) { - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %v returned a path \"%s\" that safe mode prevents opening", ZSTR_VAL(ce->name), fname); - - if (save) { - efree(save); - } - - if (temp) { - efree(temp); - } - - return ZEND_HASH_APPLY_STOP; - } -#endif if (php_check_open_basedir(fname)) { - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %v returned a path \"%s\" that open_basedir prevents opening", ZSTR_VAL(ce->name), fname); + zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %s returned a path \"%s\" that open_basedir prevents opening", ZSTR_VAL(ce->name), fname); if (save) { efree(save); @@ -1673,7 +1646,7 @@ phar_spl_fileinfo: fp = php_stream_open_wrapper(fname, "rb", STREAM_MUST_SEEK|0, &opened); if (!fp) { - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %v returned a file that could not be opened \"%s\"", ZSTR_VAL(ce->name), fname); + zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %s returned a file that could not be opened \"%s\"", ZSTR_VAL(ce->name), fname); if (save) { efree(save); @@ -2261,7 +2234,7 @@ its_ok: } /* }}} */ -static zend_object *phar_convert_to_other(phar_archive_data *source, int convert, char *ext, php_uint32 flags) /* {{{ */ +static zend_object *phar_convert_to_other(phar_archive_data *source, int convert, char *ext, uint32_t flags) /* {{{ */ { phar_archive_data *phar; phar_entry_info *entry, newentry; @@ -2385,7 +2358,7 @@ PHP_METHOD(Phar, convertToExecutable) char *ext = NULL; int is_data; size_t ext_len = 0; - php_uint32 flags; + uint32_t flags; zend_object *ret; /* a number that is not 0, 1 or 2 (Which is also Greg's birthday, so there) */ zend_long format = 9021976, method = 9021976; @@ -2489,7 +2462,7 @@ PHP_METHOD(Phar, convertToData) char *ext = NULL; int is_data; size_t ext_len = 0; - php_uint32 flags; + uint32_t flags; zend_object *ret; /* a number that is not 0, 1 or 2 (Which is also Greg's birthday so there) */ zend_long format = 9021976, method = 9021976; @@ -2755,7 +2728,7 @@ PHP_METHOD(Phar, setAlias) if (ZEND_SIZE_T_INT_OVFL(alias_len)) { RETURN_FALSE; } - if (alias_len == phar_obj->archive->alias_len && memcmp(phar_obj->archive->alias, alias, alias_len) == 0) { + if (alias_len == (size_t)phar_obj->archive->alias_len && memcmp(phar_obj->archive->alias, alias, alias_len) == 0) { RETURN_TRUE; } if (alias_len && NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len))) { @@ -3171,7 +3144,7 @@ PHP_METHOD(Phar, getModified) static int phar_set_compression(zval *zv, void *argument) /* {{{ */ { phar_entry_info *entry = (phar_entry_info *)Z_PTR_P(zv); - php_uint32 compress = *(php_uint32 *)argument; + uint32_t compress = *(uint32_t *)argument; if (entry->is_deleted) { return ZEND_HASH_APPLY_KEEP; @@ -3209,7 +3182,7 @@ static int phar_test_compression(zval *zv, void *argument) /* {{{ */ } /* }}} */ -static void pharobj_set_compression(HashTable *manifest, php_uint32 compress) /* {{{ */ +static void pharobj_set_compression(HashTable *manifest, uint32_t compress) /* {{{ */ { zend_hash_apply_with_argument(manifest, phar_set_compression, &compress); } @@ -3235,7 +3208,7 @@ PHP_METHOD(Phar, compress) zend_long method; char *ext = NULL; size_t ext_len = 0; - php_uint32 flags; + uint32_t flags; zend_object *ret; PHAR_ARCHIVE_OBJECT(); @@ -3344,7 +3317,7 @@ PHP_METHOD(Phar, decompress) PHP_METHOD(Phar, compressFiles) { char *error; - php_uint32 flags; + uint32_t flags; zend_long method; PHAR_ARCHIVE_OBJECT(); @@ -3639,7 +3612,7 @@ PHP_METHOD(Phar, offsetGet) } if (fname_len >= sizeof(".phar")-1 && !memcmp(fname, ".phar", sizeof(".phar")-1)) { - zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Cannot directly get any files or directories in magic \".phar\" directory", phar_obj->archive->fname); + zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Cannot directly get any files or directories in magic \".phar\" directory"); return; } @@ -3660,14 +3633,18 @@ PHP_METHOD(Phar, offsetGet) */ static void phar_add_file(phar_archive_data **pphar, char *filename, int filename_len, char *cont_str, size_t cont_len, zval *zresource) { + int start_pos=0; char *error; size_t contents_len; phar_entry_data *data; php_stream *contents_file; - if (filename_len >= sizeof(".phar")-1 && !memcmp(filename, ".phar", sizeof(".phar")-1) && (filename[5] == '/' || filename[5] == '\\' || filename[5] == '\0')) { - zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Cannot create any files in magic \".phar\" directory", (*pphar)->fname); - return; + if (filename_len >= (int)sizeof(".phar")-1) { + start_pos = ('/' == filename[0] ? 1 : 0); /* account for any leading slash: multiple-leads handled elsewhere */ + if (!memcmp(&filename[start_pos], ".phar", sizeof(".phar")-1) && (filename[start_pos+5] == '/' || filename[start_pos+5] == '\\' || filename[start_pos+5] == '\0')) { + zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Cannot create any files in magic \".phar\" directory"); + return; + } } if (!(data = phar_get_or_create_entry_data((*pphar)->fname, (*pphar)->fname_len, filename, filename_len, "w+b", 0, &error, 1))) { @@ -3785,7 +3762,7 @@ PHP_METHOD(Phar, offsetSet) } if (fname_len >= sizeof(".phar")-1 && !memcmp(fname, ".phar", sizeof(".phar")-1)) { - zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Cannot set any files or directories in magic \".phar\" directory", phar_obj->archive->fname); + zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Cannot set any files or directories in magic \".phar\" directory"); return; } @@ -3893,13 +3870,6 @@ PHP_METHOD(Phar, addFile) RETURN_FALSE; } -#if PHP_API_VERSION < 20100412 - if (PG(safe_mode) && (!php_checkuid(fname, NULL, CHECKUID_ALLOW_ONLY_FILE))) { - zend_throw_exception_ex(spl_ce_RuntimeException, 0, "phar error: unable to open file \"%s\" to add to phar archive, safe_mode restrictions prevent this", fname); - return; - } -#endif - if (!strstr(fname, "://") && php_check_open_basedir(fname)) { zend_throw_exception_ex(spl_ce_RuntimeException, 0, "phar error: unable to open file \"%s\" to add to phar archive, open_basedir restrictions prevent this", fname); return; @@ -4148,13 +4118,6 @@ PHP_METHOD(Phar, delMetadata) } } /* }}} */ -#if PHP_API_VERSION < 20100412 -#define PHAR_OPENBASEDIR_CHECKPATH(filename) \ - (PG(safe_mode) && (!php_checkuid(filename, NULL, CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(filename) -#else -#define PHAR_OPENBASEDIR_CHECKPATH(filename) \ - php_check_open_basedir(filename) -#endif static int phar_extract_file(zend_bool overwrite, phar_entry_info *entry, char *dest, int dest_len, char **error) /* {{{ */ { @@ -4233,7 +4196,7 @@ static int phar_extract_file(zend_bool overwrite, phar_entry_info *entry, char * return FAILURE; } - if (PHAR_OPENBASEDIR_CHECKPATH(fullpath)) { + if (php_check_open_basedir(fullpath)) { spprintf(error, 4096, "Cannot extract \"%s\" to \"%s\", openbasedir/safe mode restrictions in effect", entry->filename, fullpath); efree(fullpath); efree(new_state.cwd); @@ -4289,11 +4252,7 @@ static int phar_extract_file(zend_bool overwrite, phar_entry_info *entry, char * return SUCCESS; } -#if PHP_API_VERSION < 20100412 - fp = php_stream_open_wrapper(fullpath, "w+b", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL); -#else fp = php_stream_open_wrapper(fullpath, "w+b", REPORT_ERRORS, NULL); -#endif if (!fp) { spprintf(error, 4096, "Cannot extract \"%s\", could not open for writing \"%s\"", entry->filename, fullpath); @@ -5139,57 +5098,46 @@ PHP_METHOD(PharFileInfo, decompress) } /* }}} */ -#endif /* HAVE_SPL */ - /* {{{ phar methods */ -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar___construct, 0, 0, 1) ZEND_ARG_INFO(0, filename) ZEND_ARG_INFO(0, flags) ZEND_ARG_INFO(0, alias) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_createDS, 0, 0, 0) ZEND_ARG_INFO(0, index) ZEND_ARG_INFO(0, webindex) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_cancompress, 0, 0, 0) ZEND_ARG_INFO(0, method) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_isvalidpharfilename, 0, 0, 1) ZEND_ARG_INFO(0, filename) ZEND_ARG_INFO(0, executable) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_loadPhar, 0, 0, 1) ZEND_ARG_INFO(0, filename) ZEND_ARG_INFO(0, alias) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_mapPhar, 0, 0, 0) ZEND_ARG_INFO(0, alias) ZEND_ARG_INFO(0, offset) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_mount, 0, 0, 2) ZEND_ARG_INFO(0, inphar) ZEND_ARG_INFO(0, externalfile) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_mungServer, 0, 0, 1) ZEND_ARG_INFO(0, munglist) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_webPhar, 0, 0, 0) ZEND_ARG_INFO(0, alias) ZEND_ARG_INFO(0, index) @@ -5198,141 +5146,112 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_webPhar, 0, 0, 0) ZEND_ARG_INFO(0, rewrites) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_running, 0, 0, 0) ZEND_ARG_INFO(0, retphar) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_ua, 0, 0, 1) ZEND_ARG_INFO(0, archive) ZEND_END_ARG_INFO() -#if HAVE_SPL -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_build, 0, 0, 1) ZEND_ARG_INFO(0, iterator) ZEND_ARG_INFO(0, base_directory) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_conv, 0, 0, 0) ZEND_ARG_INFO(0, format) ZEND_ARG_INFO(0, compression_type) ZEND_ARG_INFO(0, file_ext) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_comps, 0, 0, 1) ZEND_ARG_INFO(0, compression_type) ZEND_ARG_INFO(0, file_ext) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_decomp, 0, 0, 0) ZEND_ARG_INFO(0, file_ext) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_comp, 0, 0, 1) ZEND_ARG_INFO(0, compression_type) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_compo, 0, 0, 0) ZEND_ARG_INFO(0, compression_type) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_copy, 0, 0, 2) ZEND_ARG_INFO(0, newfile) ZEND_ARG_INFO(0, oldfile) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_delete, 0, 0, 1) ZEND_ARG_INFO(0, entry) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_fromdir, 0, 0, 1) ZEND_ARG_INFO(0, base_dir) ZEND_ARG_INFO(0, regex) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_offsetExists, 0, 0, 1) ZEND_ARG_INFO(0, entry) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_offsetSet, 0, 0, 2) ZEND_ARG_INFO(0, entry) ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_setAlias, 0, 0, 1) ZEND_ARG_INFO(0, alias) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_setMetadata, 0, 0, 1) ZEND_ARG_INFO(0, metadata) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_setSigAlgo, 0, 0, 1) ZEND_ARG_INFO(0, algorithm) ZEND_ARG_INFO(0, privatekey) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_setStub, 0, 0, 1) ZEND_ARG_INFO(0, newstub) ZEND_ARG_INFO(0, maxlen) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_emptydir, 0, 0, 0) ZEND_ARG_INFO(0, dirname) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_extract, 0, 0, 1) ZEND_ARG_INFO(0, pathto) ZEND_ARG_INFO(0, files) ZEND_ARG_INFO(0, overwrite) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_addfile, 0, 0, 1) ZEND_ARG_INFO(0, filename) ZEND_ARG_INFO(0, localname) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_fromstring, 0, 0, 1) ZEND_ARG_INFO(0, localname) ZEND_ARG_INFO(0, contents) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_phar_isff, 0, 0, 1) ZEND_ARG_INFO(0, fileformat) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO(arginfo_phar__void, 0) ZEND_END_ARG_INFO() -#endif /* HAVE_SPL */ - zend_function_entry php_archive_methods[] = { -#if !HAVE_SPL - PHP_ME(Phar, __construct, arginfo_phar___construct, ZEND_ACC_PRIVATE) -#else PHP_ME(Phar, __construct, arginfo_phar___construct, ZEND_ACC_PUBLIC) PHP_ME(Phar, __destruct, arginfo_phar__void, ZEND_ACC_PUBLIC) PHP_ME(Phar, addEmptyDir, arginfo_phar_emptydir, ZEND_ACC_PUBLIC) @@ -5374,7 +5293,6 @@ zend_function_entry php_archive_methods[] = { PHP_ME(Phar, setStub, arginfo_phar_setStub, ZEND_ACC_PUBLIC) PHP_ME(Phar, startBuffering, arginfo_phar__void, ZEND_ACC_PUBLIC) PHP_ME(Phar, stopBuffering, arginfo_phar__void, ZEND_ACC_PUBLIC) -#endif /* static member functions */ PHP_ME(Phar, apiVersion, arginfo_phar__void, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC|ZEND_ACC_FINAL) PHP_ME(Phar, canCompress, arginfo_phar_cancompress, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC|ZEND_ACC_FINAL) @@ -5394,18 +5312,15 @@ zend_function_entry php_archive_methods[] = { PHP_FE_END }; -PHAR_ARG_INFO + ZEND_BEGIN_ARG_INFO_EX(arginfo_data___construct, 0, 0, 1) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, flags) - ZEND_ARG_INFO(0, alias) - ZEND_ARG_INFO(0, fileformat) + ZEND_ARG_INFO(0, filename) + ZEND_ARG_INFO(0, flags) + ZEND_ARG_INFO(0, alias) + ZEND_ARG_INFO(0, fileformat) ZEND_END_ARG_INFO() zend_function_entry php_data_methods[] = { -#if !HAVE_SPL - PHP_ME(Phar, __construct, arginfo_data___construct, ZEND_ACC_PRIVATE) -#else PHP_ME(Phar, __construct, arginfo_data___construct, ZEND_ACC_PUBLIC) PHP_ME(Phar, __destruct, arginfo_phar__void, ZEND_ACC_PUBLIC) PHP_ME(Phar, addEmptyDir, arginfo_phar_emptydir, ZEND_ACC_PUBLIC) @@ -5447,7 +5362,6 @@ zend_function_entry php_data_methods[] = { PHP_ME(Phar, setStub, arginfo_phar_setStub, ZEND_ACC_PUBLIC) PHP_ME(Phar, startBuffering, arginfo_phar__void, ZEND_ACC_PUBLIC) PHP_ME(Phar, stopBuffering, arginfo_phar__void, ZEND_ACC_PUBLIC) -#endif /* static member functions */ PHP_ME(Phar, apiVersion, arginfo_phar__void, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC|ZEND_ACC_FINAL) PHP_ME(Phar, canCompress, arginfo_phar_cancompress, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC|ZEND_ACC_FINAL) @@ -5467,13 +5381,10 @@ zend_function_entry php_data_methods[] = { PHP_FE_END }; -#if HAVE_SPL -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_entry___construct, 0, 0, 1) ZEND_ARG_INFO(0, filename) ZEND_END_ARG_INFO() -PHAR_ARG_INFO ZEND_BEGIN_ARG_INFO_EX(arginfo_entry_chmod, 0, 0, 1) ZEND_ARG_INFO(0, perms) ZEND_END_ARG_INFO() @@ -5496,7 +5407,6 @@ zend_function_entry php_entry_methods[] = { PHP_ME(PharFileInfo, setMetadata, arginfo_phar_setMetadata, ZEND_ACC_PUBLIC) PHP_FE_END }; -#endif /* HAVE_SPL */ zend_function_entry phar_exception_methods[] = { PHP_FE_END @@ -5513,7 +5423,6 @@ void phar_object_init(void) /* {{{ */ INIT_CLASS_ENTRY(ce, "PharException", phar_exception_methods); phar_ce_PharException = zend_register_internal_class_ex(&ce, zend_ce_exception); -#if HAVE_SPL INIT_CLASS_ENTRY(ce, "Phar", php_archive_methods); phar_ce_archive = zend_register_internal_class_ex(&ce, spl_ce_RecursiveDirectoryIterator); @@ -5526,15 +5435,6 @@ void phar_object_init(void) /* {{{ */ INIT_CLASS_ENTRY(ce, "PharFileInfo", php_entry_methods); phar_ce_entry = zend_register_internal_class_ex(&ce, spl_ce_SplFileInfo); -#else - INIT_CLASS_ENTRY(ce, "Phar", php_archive_methods); - phar_ce_archive = zend_register_internal_class(&ce); - phar_ce_archive->ce_flags |= ZEND_ACC_FINAL; - - INIT_CLASS_ENTRY(ce, "PharData", php_archive_methods); - phar_ce_data = zend_register_internal_class(&ce); - phar_ce_data->ce_flags |= ZEND_ACC_FINAL; -#endif REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "BZ2", PHAR_ENT_COMPRESSED_BZ2) REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "GZ", PHAR_ENT_COMPRESSED_GZ) diff --git a/ext/phar/phar_path_check.c b/ext/phar/phar_path_check.c index 7bab9494a5..c9f78023e6 100644 --- a/ext/phar/phar_path_check.c +++ b/ext/phar/phar_path_check.c @@ -1,10 +1,10 @@ -/* Generated by re2c 0.13.5 */ +/* Generated by re2c 0.16 */ #line 1 "ext/phar/phar_path_check.re" /* +----------------------------------------------------------------------+ | phar php single-file executable PHP extension | +----------------------------------------------------------------------+ - | Copyright (c) 2007-2017 The PHP Group | + | Copyright (c) 2007-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -47,90 +47,105 @@ loop: { YYCTYPE yych; unsigned int yyaccept = 0; - if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; if (yych <= '[') { if (yych <= ')') { - if (yych <= '\t') { - if (yych <= 0x00) goto yy21; - goto yy23; + if (yych <= '\f') { + if (yych >= 0x01) goto yy4; } else { - if (yych <= '\n') goto yy2; - if (yych <= 0x19) goto yy23; - goto yy11; + if (yych <= '\r') goto yy6; + if (yych <= 0x19) goto yy4; + goto yy7; } } else { if (yych <= '/') { - if (yych <= '*') goto yy7; - if (yych <= '.') goto yy11; - goto yy3; - } else { - if (yych == '?') goto yy9; + if (yych <= '*') goto yy9; + if (yych <= '.') goto yy7; goto yy11; + } else { + if (yych == '?') goto yy12; + goto yy7; } } } else { if (yych <= 0xEC) { if (yych <= 0xC1) { - if (yych <= '\\') goto yy5; - if (yych <= 0x7F) goto yy11; - goto yy23; + if (yych <= '\\') goto yy14; + if (yych <= 0x7F) goto yy7; + goto yy4; } else { - if (yych <= 0xDF) goto yy12; - if (yych <= 0xE0) goto yy14; - goto yy15; + if (yych <= 0xDF) goto yy16; + if (yych <= 0xE0) goto yy17; + goto yy18; } } else { if (yych <= 0xF0) { - if (yych <= 0xED) goto yy16; - if (yych <= 0xEF) goto yy17; - goto yy18; + if (yych <= 0xED) goto yy19; + if (yych <= 0xEF) goto yy18; + goto yy20; } else { - if (yych <= 0xF3) goto yy19; - if (yych <= 0xF4) goto yy20; - goto yy23; + if (yych <= 0xF3) goto yy21; + if (yych <= 0xF4) goto yy22; + goto yy4; } } } -yy2: - YYCURSOR = YYMARKER; - if (yyaccept <= 0) { - goto yy4; - } else { - goto yy13; - } -yy3: - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '-') goto yy4; - if (yych <= '.') goto yy35; - if (yych <= '/') goto yy36; -yy4: -#line 88 "ext/phar/phar_path_check.re" + ++YYCURSOR; +#line 93 "ext/phar/phar_path_check.re" { - goto loop; + if (**s == '/') { + (*s)++; + (*len)--; + } + if ((p - (const unsigned char*)*s) - 1 != *len) + { + *error ="illegal character"; + return pcr_err_illegal_char; + } + *error = NULL; + return pcr_is_ok; } -#line 115 "ext/phar/phar_path_check.c" -yy5: +#line 110 "ext/phar/phar_path_check.c" +yy4: ++YYCURSOR; -#line 72 "ext/phar/phar_path_check.re" +yy5: +#line 106 "ext/phar/phar_path_check.re" { - *error = "back-slash"; - return pcr_err_back_slash; + *error ="illegal character"; + return pcr_err_illegal_char; } -#line 123 "ext/phar/phar_path_check.c" +#line 119 "ext/phar/phar_path_check.c" +yy6: + yych = *++YYCURSOR; + if (yych == '\n') goto yy4; + goto yy5; yy7: ++YYCURSOR; -#line 76 "ext/phar/phar_path_check.re" +yy8: +#line 90 "ext/phar/phar_path_check.re" { - *error = "star"; - return pcr_err_star; + goto loop; } #line 131 "ext/phar/phar_path_check.c" yy9: ++YYCURSOR; -#line 80 "ext/phar/phar_path_check.re" +#line 78 "ext/phar/phar_path_check.re" + { + *error = "star"; + return pcr_err_star; + } +#line 139 "ext/phar/phar_path_check.c" +yy11: + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '-') goto yy8; + if (yych <= '.') goto yy23; + if (yych <= '/') goto yy25; + goto yy8; +yy12: + ++YYCURSOR; +#line 82 "ext/phar/phar_path_check.re" { if (**s == '/') { (*s)++; @@ -139,166 +154,108 @@ yy9: *error = NULL; return pcr_use_query; } -#line 143 "ext/phar/phar_path_check.c" -yy11: - yych = *++YYCURSOR; - goto yy4; -yy12: +#line 158 "ext/phar/phar_path_check.c" +yy14: ++YYCURSOR; - if ((yych = *YYCURSOR) <= 0x7F) goto yy13; - if (yych <= 0xBF) goto yy26; -yy13: -#line 104 "ext/phar/phar_path_check.re" +#line 74 "ext/phar/phar_path_check.re" { - *error ="illegal character"; - return pcr_err_illegal_char; + *error = "back-slash"; + return pcr_err_back_slash; } -#line 157 "ext/phar/phar_path_check.c" -yy14: - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= 0x9F) goto yy13; - if (yych <= 0xBF) goto yy34; - goto yy13; -yy15: - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= 0x7F) goto yy13; - if (yych <= 0xBF) goto yy33; - goto yy13; +#line 166 "ext/phar/phar_path_check.c" yy16: - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if (yych <= 0x7F) goto yy13; - if (yych <= 0x9F) goto yy32; - goto yy13; + yych = *++YYCURSOR; + if (yych <= 0x7F) goto yy5; + if (yych <= 0xBF) goto yy7; + goto yy5; yy17: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych <= 0x7F) goto yy13; - if (yych <= 0xBF) goto yy31; - goto yy13; + if (yych <= 0x9F) goto yy5; + if (yych <= 0xBF) goto yy27; + goto yy5; yy18: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych <= 0x8F) goto yy13; - if (yych <= 0xBF) goto yy29; - goto yy13; + if (yych <= 0x7F) goto yy5; + if (yych <= 0xBF) goto yy27; + goto yy5; yy19: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych <= 0x7F) goto yy13; - if (yych <= 0xBF) goto yy27; - goto yy13; + if (yych <= 0x7F) goto yy5; + if (yych <= 0x9F) goto yy27; + goto yy5; yy20: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - if (yych <= 0x7F) goto yy13; - if (yych <= 0x8F) goto yy24; - goto yy13; + if (yych <= 0x8F) goto yy5; + if (yych <= 0xBF) goto yy28; + goto yy5; yy21: - ++YYCURSOR; -#line 91 "ext/phar/phar_path_check.re" - { - if (**s == '/') { - (*s)++; - (*len)--; - } - if ((p - (const unsigned char*)*s) - 1 != *len) - { - *error ="illegal character"; - return pcr_err_illegal_char; - } - *error = NULL; - return pcr_is_ok; - } -#line 216 "ext/phar/phar_path_check.c" + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 0x7F) goto yy5; + if (yych <= 0xBF) goto yy28; + goto yy5; +yy22: + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 0x7F) goto yy5; + if (yych <= 0x8F) goto yy28; + goto yy5; yy23: yych = *++YYCURSOR; - goto yy13; + if (yych <= 0x00) goto yy29; + if (yych <= '-') goto yy24; + if (yych <= '.') goto yy31; + if (yych <= '/') goto yy29; yy24: - yych = *++YYCURSOR; - if (yych <= 0x7F) goto yy2; - if (yych >= 0xC0) goto yy2; - yych = *++YYCURSOR; - if (yych <= 0x7F) goto yy2; - if (yych >= 0xC0) goto yy2; -yy26: - yych = *++YYCURSOR; - goto yy4; -yy27: - yych = *++YYCURSOR; - if (yych <= 0x7F) goto yy2; - if (yych >= 0xC0) goto yy2; - yych = *++YYCURSOR; - if (yych <= 0x7F) goto yy2; - if (yych <= 0xBF) goto yy26; - goto yy2; -yy29: - yych = *++YYCURSOR; - if (yych <= 0x7F) goto yy2; - if (yych >= 0xC0) goto yy2; - yych = *++YYCURSOR; - if (yych <= 0x7F) goto yy2; - if (yych <= 0xBF) goto yy26; - goto yy2; -yy31: - yych = *++YYCURSOR; - if (yych <= 0x7F) goto yy2; - if (yych <= 0xBF) goto yy26; - goto yy2; -yy32: - yych = *++YYCURSOR; - if (yych <= 0x7F) goto yy2; - if (yych <= 0xBF) goto yy26; - goto yy2; -yy33: - yych = *++YYCURSOR; - if (yych <= 0x7F) goto yy2; - if (yych <= 0xBF) goto yy26; - goto yy2; -yy34: - yych = *++YYCURSOR; - if (yych <= 0x7F) goto yy2; - if (yych <= 0xBF) goto yy26; - goto yy2; -yy35: - yych = *++YYCURSOR; - if (yych <= 0x00) goto yy39; - if (yych <= '-') goto yy2; - if (yych <= '.') goto yy38; - if (yych <= '/') goto yy39; - goto yy2; -yy36: + YYCURSOR = YYMARKER; + if (yyaccept == 0) { + goto yy8; + } else { + goto yy5; + } +yy25: ++YYCURSOR; -#line 60 "ext/phar/phar_path_check.re" +#line 62 "ext/phar/phar_path_check.re" { *error = "double slash"; return pcr_err_double_slash; } -#line 280 "ext/phar/phar_path_check.c" -yy38: +#line 228 "ext/phar/phar_path_check.c" +yy27: yych = *++YYCURSOR; - if (yych <= 0x00) goto yy41; - if (yych == '/') goto yy41; - goto yy2; -yy39: + if (yych <= 0x7F) goto yy24; + if (yych <= 0xBF) goto yy7; + goto yy24; +yy28: + yych = *++YYCURSOR; + if (yych <= 0x7F) goto yy24; + if (yych <= 0xBF) goto yy27; + goto yy24; +yy29: ++YYCURSOR; -#line 68 "ext/phar/phar_path_check.re" +#line 70 "ext/phar/phar_path_check.re" { *error = "current directory reference"; return pcr_err_curr_dir; } -#line 293 "ext/phar/phar_path_check.c" -yy41: +#line 246 "ext/phar/phar_path_check.c" +yy31: + yych = *++YYCURSOR; + if (yych <= 0x00) goto yy32; + if (yych != '/') goto yy24; +yy32: ++YYCURSOR; -#line 64 "ext/phar/phar_path_check.re" +#line 66 "ext/phar/phar_path_check.re" { *error = "upper directory reference"; return pcr_err_up_dir; } -#line 301 "ext/phar/phar_path_check.c" +#line 258 "ext/phar/phar_path_check.c" } -#line 108 "ext/phar/phar_path_check.re" +#line 110 "ext/phar/phar_path_check.re" } diff --git a/ext/phar/phar_path_check.re b/ext/phar/phar_path_check.re index a1140c0a70..e4d54a4355 100644 --- a/ext/phar/phar_path_check.re +++ b/ext/phar/phar_path_check.re @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar php single-file executable PHP extension | +----------------------------------------------------------------------+ - | Copyright (c) 2007-2017 The PHP Group | + | Copyright (c) 2007-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -41,7 +41,8 @@ phar_path_check_result phar_path_check(char **s, int *len, const char **error) loop: /*!re2c -END = "\x00"; +END = "\x00"; +NEWLINE = "\r"? "\n"; UTF8T = [\x80-\xBF] ; UTF8_1 = [\x1A-\x7F] ; UTF8_2 = [\xC2-\xDF] UTF8T ; @@ -55,8 +56,9 @@ UTF8_4B = [\xF1-\xF3] UTF8T{3} ; UTF8_4C = "\xF4" [\x80-\x8F] UTF8T{2} ; UTF8_4 = UTF8_4A | UTF8_4B | UTF8_4C ; UTF8 = UTF8_1 | UTF8_2 | UTF8_3 | UTF8_4 ; -EOS = "/" | END; -ANY = .; +EOS = "/" | END; +ANY = . | NEWLINE; + "//" { *error = "double slash"; return pcr_err_double_slash; diff --git a/ext/phar/pharzip.h b/ext/phar/pharzip.h index 91824d2e2d..3a34d21366 100644 --- a/ext/phar/pharzip.h +++ b/ext/phar/pharzip.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar php single-file executable PHP extension | +----------------------------------------------------------------------+ - | Copyright (c) 2006-2017 The PHP Group | + | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/phar/php_phar.h b/ext/phar/php_phar.h index 3e54740a59..efaacc5781 100644 --- a/ext/phar/php_phar.h +++ b/ext/phar/php_phar.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar php single-file executable PHP extension | +----------------------------------------------------------------------+ - | Copyright (c) 2005-2017 The PHP Group | + | Copyright (c) 2005-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/phar/stream.c b/ext/phar/stream.c index 69b7f43033..0f0a74772f 100644 --- a/ext/phar/stream.c +++ b/ext/phar/stream.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar:// stream wrapper support | +----------------------------------------------------------------------+ - | Copyright (c) 2005-2017 The PHP Group | + | Copyright (c) 2005-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -45,6 +45,7 @@ php_stream_wrapper_ops phar_stream_wops = { phar_wrapper_rename, /* rename */ phar_wrapper_mkdir, /* create directory */ phar_wrapper_rmdir, /* remove directory */ + NULL }; php_stream_wrapper php_stream_phar_wrapper = { diff --git a/ext/phar/stream.h b/ext/phar/stream.h index d763f71039..d20cee29c4 100644 --- a/ext/phar/stream.h +++ b/ext/phar/stream.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar php single-file executable PHP extension | +----------------------------------------------------------------------+ - | Copyright (c) 2006-2017 The PHP Group | + | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/phar/stub.h b/ext/phar/stub.h index 71545c92bc..b402cacde6 100644 --- a/ext/phar/stub.h +++ b/ext/phar/stub.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | phar php single-file executable PHP extension generated stub | +----------------------------------------------------------------------+ - | Copyright (c) 2005-2017 The PHP Group | + | Copyright (c) 2005-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -24,11 +24,10 @@ static inline zend_string* phar_get_stub(const char *index_php, const char *web, static const char newstub1_0[] = "';\n\nif (in_array('phar', stream_get_wrappers()) && class_exists('Phar', 0)) {\nPhar::interceptFileFuncs();\nset_include_path('phar://' . __FILE__ . PATH_SEPARATOR . get_include_path());\nPhar::webPhar(null, $web);\ninclude 'phar://' . __FILE__ . '/' . Extract_Phar::START;\nreturn;\n}\n\nif (@(isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && ($_SERVER['REQUEST_METHOD'] == 'GET' || $_SERVER['REQUEST_METHOD'] == 'POST'))) {\nExtract_Phar::go(true);\n$mimes = array(\n'phps' => 2,\n'c' => 'text/plain',\n'cc' => 'text/plain',\n'cpp' => 'text/plain',\n'c++' => 'text/plain',\n'dtd' => 'text/plain',\n'h' => 'text/plain',\n'log' => 'text/plain',\n'rng' => 'text/plain',\n'txt' => 'text/plain',\n'xsd' => 'text/plain',\n'php' => 1,\n'inc' => 1,\n'avi' => 'video/avi',\n'bmp' => 'image/bmp',\n'css' => 'text/css',\n'gif' => 'image/gif',\n'htm' => 'text/html',\n'html' => 'text/html',\n'htmls' => 'text/html',\n'ico' => 'image/x-ico',\n'jpe' => 'image/jpeg',\n'jpg' => 'image/jpeg',\n'jpeg' => 'image/jpeg',\n'js' => 'application/x-javascript',\n'midi' => 'audio/midi',\n'mid' => 'audio/midi',\n'mod' => 'audio/mod',\n'mov' => 'movie/quicktime',\n'mp3' => 'audio/mp3',\n'mpg' => 'video/mpeg',\n'mpeg' => 'video/mpeg',\n'pdf' => 'application/pdf',\n'png' => 'image/png',\n'swf' => 'application/shockwave-flash',\n'tif' => 'image/tiff',\n'tiff' => 'image/tiff',\n'wav' => 'audio/wav',\n'xbm' => 'image/xbm',\n'xml' => 'text/xml',\n);\n\nheader(\"Cache-Control: no-cache, must-revalidate\");\nheader(\"Pragma: no-cache\");\n\n$basename = basename(__FILE__);\nif (!strpos($_SERVER['REQUEST_URI'], $basename)) {\nchdir(Extract_Phar::$temp);\ninclude $web;\nreturn;\n}\n$pt = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['REQUEST_URI'], $basename) + strlen($basename));\nif (!$pt || $pt == '/') {\n$pt = $web;\nheader('HTTP/1.1 301 Moved Permanently');\nheader('Location: ' . $_SERVER['REQUEST_URI'] . '/' . $pt);\nexit;\n}\n$a = realpath(Extract_Phar::$temp . DIRECTORY_SEPARATOR . $pt);\nif (!$a || strlen(dirname($a)) < strlen("; static const char newstub1_1[] = "Extract_Phar::$temp)) {\nheader('HTTP/1.0 404 Not Found');\necho \"<html>\\n <head>\\n <title>File Not Found<title>\\n </head>\\n <body>\\n <h1>404 - File Not Found</h1>\\n </body>\\n</html>\";\nexit;\n}\n$b = pathinfo($a);\nif (!isset($b['extension'])) {\nheader('Content-Type: text/plain');\nheader('Content-Length: ' . filesize($a));\nreadfile($a);\nexit;\n}\nif (isset($mimes[$b['extension']])) {\nif ($mimes[$b['extension']] === 1) {\ninclude $a;\nexit;\n}\nif ($mimes[$b['extension']] === 2) {\nhighlight_file($a);\nexit;\n}\nheader('Content-Type: ' .$mimes[$b['extension']]);\nheader('Content-Length: ' . filesize($a));\nreadfile($a);\nexit;\n}\n}\n\nclass Extract_Phar\n{\nstatic $temp;\nstatic $origdir;\nconst GZ = 0x1000;\nconst BZ2 = 0x2000;\nconst MASK = 0x3000;\nconst START = '"; static const char newstub2[] = "';\nconst LEN = "; - static const char newstub3_0[] = ";\n\nstatic function go($return = false)\n{\n$fp = fopen(__FILE__, 'rb');\nfseek($fp, self::LEN);\n$L = unpack('V', $a = (binary)fread($fp, 4));\n$m = (binary)'';\n\ndo {\n$read = 8192;\nif ($L[1] - strlen($m) < 8192) {\n$read = $L[1] - strlen($m);\n}\n$last = (binary)fread($fp, $read);\n$m .= $last;\n} while (strlen($last) && strlen($m) < $L[1]);\n\nif (strlen($m) < $L[1]) {\ndie('ERROR: manifest length read was \"' .\nstrlen($m) .'\" should be \"' .\n$L[1] . '\"');\n}\n\n$info = self::_unpack($m);\n$f = $info['c'];\n\nif ($f & self::GZ) {\nif (!function_exists('gzinflate')) {\ndie('Error: zlib extension is not enabled -' .\n' gzinflate() function needed for zlib-compressed .phars');\n}\n}\n\nif ($f & self::BZ2) {\nif (!function_exists('bzdecompress')) {\ndie('Error: bzip2 extension is not enabled -' .\n' bzdecompress() function needed for bz2-compressed .phars');\n}\n}\n\n$temp = self::tmpdir();\n\nif (!$temp || !is_writable($temp)) {\n$sessionpath = session_save_path();\nif (strpos ($sessionpath, \";\") !== false)\n$sessionpath = substr ($sessionpath, strpos ($sessionpath, \";\")+1);\nif (!file_exists($sessionpath) || !is_dir($sessionpath)) {\ndie('Could not locate temporary directory to extract phar');\n}\n$temp = $sessionpath;\n}\n\n$temp .= '/pharextract/'.basename(__FILE__, '.phar');\nself::$temp = $temp;\nself::$origdir = getcwd();\n@mkdir($temp, 0777, true);\n$temp = realpath($temp);\n\nif (!file_exists($temp . DIRECTORY_SEPARATOR . md5_file(__FILE__))) {\nself::_removeTmpFiles($temp, getcwd());\n@mkdir($temp, 0777, true);\n@file_put_contents($temp . '/' . md5_file(__FILE__), '');\n\nforeach ($info['m'] as $path => $file) {\n$a = !file_exists(dirname($temp . '/' . $path));\n@mkdir(dirname($temp . '/' . $path), 0777, true);\nclearstatcache();\n\nif ($path[strlen($path) - 1] == '/') {\n@mkdir($temp . '/' . $path, 0777);\n} else {\nfile_put_contents($temp . '/' . $path, self::extractFile($path, $file, $fp));\n@chmod($temp . '/' . $path, 0666);\n}\n}\n}\n\nchdir($temp);\n\nif (!$return) {\ninclude self::ST"; - static const char newstub3_1[] = "ART;\n}\n}\n\nstatic function tmpdir()\n{\nif (strpos(PHP_OS, 'WIN') !== false) {\nif ($var = getenv('TMP') ? getenv('TMP') : getenv('TEMP')) {\nreturn $var;\n}\nif (is_dir('/temp') || mkdir('/temp')) {\nreturn realpath('/temp');\n}\nreturn false;\n}\nif ($var = getenv('TMPDIR')) {\nreturn $var;\n}\nreturn realpath('/tmp');\n}\n\nstatic function _unpack($m)\n{\n$info = unpack('V', substr($m, 0, 4));\n $l = unpack('V', substr($m, 10, 4));\n$m = substr($m, 14 + $l[1]);\n$s = unpack('V', substr($m, 0, 4));\n$o = 0;\n$start = 4 + $s[1];\n$ret['c'] = 0;\n\nfor ($i = 0; $i < $info[1]; $i++) {\n $len = unpack('V', substr($m, $start, 4));\n$start += 4;\n $savepath = substr($m, $start, $len[1]);\n$start += $len[1];\n $ret['m'][$savepath] = array_values(unpack('Va/Vb/Vc/Vd/Ve/Vf', substr($m, $start, 24)));\n$ret['m'][$savepath][3] = sprintf('%u', $ret['m'][$savepath][3]\n& 0xffffffff);\n$ret['m'][$savepath][7] = $o;\n$o += $ret['m'][$savepath][2];\n$start += 24 + $ret['m'][$savepath][5];\n$ret['c'] |= $ret['m'][$savepath][4] & self::MASK;\n}\nreturn $ret;\n}\n\nstatic function extractFile($path, $entry, $fp)\n{\n$data = '';\n$c = $entry[2];\n\nwhile ($c) {\nif ($c < 8192) {\n$data .= @fread($fp, $c);\n$c = 0;\n} else {\n$c -= 8192;\n$data .= @fread($fp, 8192);\n}\n}\n\nif ($entry[4] & self::GZ) {\n$data = gzinflate($data);\n} elseif ($entry[4] & self::BZ2) {\n$data = bzdecompress($data);\n}\n\nif (strlen($data) != $entry[0]) {\ndie(\"Invalid internal .phar file (size error \" . strlen($data) . \" != \" .\n$stat[7] . \")\");\n}\n\nif ($entry[3] != sprintf(\"%u\", crc32((binary)$data) & 0xffffffff)) {\ndie(\"Invalid internal .phar file (checksum error)\");\n}\n\nreturn $data;\n}\n\nstatic function _removeTmpFiles($temp, $origdir)\n{\nchdir($temp);\n\nforeach (glob('*') as $f) {\nif (file_exists($f)) {\nis_dir($f) ? @rmdir($f) : @unlink($f);\nif (file_exists($f) && is_dir($f)) {\nself::_removeTmpFiles($f, getcwd());\n}\n}\n}\n\n@rmdir($temp);\nclearstatcache();\nchdir($origdir);\n}\n}\n\nExtract_Phar::go();\n__HALT_COMPIL"; - static const char newstub3_2[] = "ER(); ?>"; + static const char newstub3_0[] = ";\n\nstatic function go($return = false)\n{\n$fp = fopen(__FILE__, 'rb');\nfseek($fp, self::LEN);\n$L = unpack('V', $a = fread($fp, 4));\n$m = '';\n\ndo {\n$read = 8192;\nif ($L[1] - strlen($m) < 8192) {\n$read = $L[1] - strlen($m);\n}\n$last = fread($fp, $read);\n$m .= $last;\n} while (strlen($last) && strlen($m) < $L[1]);\n\nif (strlen($m) < $L[1]) {\ndie('ERROR: manifest length read was \"' .\nstrlen($m) .'\" should be \"' .\n$L[1] . '\"');\n}\n\n$info = self::_unpack($m);\n$f = $info['c'];\n\nif ($f & self::GZ) {\nif (!function_exists('gzinflate')) {\ndie('Error: zlib extension is not enabled -' .\n' gzinflate() function needed for zlib-compressed .phars');\n}\n}\n\nif ($f & self::BZ2) {\nif (!function_exists('bzdecompress')) {\ndie('Error: bzip2 extension is not enabled -' .\n' bzdecompress() function needed for bz2-compressed .phars');\n}\n}\n\n$temp = self::tmpdir();\n\nif (!$temp || !is_writable($temp)) {\n$sessionpath = session_save_path();\nif (strpos ($sessionpath, \";\") !== false)\n$sessionpath = substr ($sessionpath, strpos ($sessionpath, \";\")+1);\nif (!file_exists($sessionpath) || !is_dir($sessionpath)) {\ndie('Could not locate temporary directory to extract phar');\n}\n$temp = $sessionpath;\n}\n\n$temp .= '/pharextract/'.basename(__FILE__, '.phar');\nself::$temp = $temp;\nself::$origdir = getcwd();\n@mkdir($temp, 0777, true);\n$temp = realpath($temp);\n\nif (!file_exists($temp . DIRECTORY_SEPARATOR . md5_file(__FILE__))) {\nself::_removeTmpFiles($temp, getcwd());\n@mkdir($temp, 0777, true);\n@file_put_contents($temp . '/' . md5_file(__FILE__), '');\n\nforeach ($info['m'] as $path => $file) {\n$a = !file_exists(dirname($temp . '/' . $path));\n@mkdir(dirname($temp . '/' . $path), 0777, true);\nclearstatcache();\n\nif ($path[strlen($path) - 1] == '/') {\n@mkdir($temp . '/' . $path, 0777);\n} else {\nfile_put_contents($temp . '/' . $path, self::extractFile($path, $file, $fp));\n@chmod($temp . '/' . $path, 0666);\n}\n}\n}\n\nchdir($temp);\n\nif (!$return) {\ninclude self::START;\n}\n}\n\nstatic fun"; + static const char newstub3_1[] = "ction tmpdir()\n{\nif (strpos(PHP_OS, 'WIN') !== false) {\nif ($var = getenv('TMP') ? getenv('TMP') : getenv('TEMP')) {\nreturn $var;\n}\nif (is_dir('/temp') || mkdir('/temp')) {\nreturn realpath('/temp');\n}\nreturn false;\n}\nif ($var = getenv('TMPDIR')) {\nreturn $var;\n}\nreturn realpath('/tmp');\n}\n\nstatic function _unpack($m)\n{\n$info = unpack('V', substr($m, 0, 4));\n $l = unpack('V', substr($m, 10, 4));\n$m = substr($m, 14 + $l[1]);\n$s = unpack('V', substr($m, 0, 4));\n$o = 0;\n$start = 4 + $s[1];\n$ret['c'] = 0;\n\nfor ($i = 0; $i < $info[1]; $i++) {\n $len = unpack('V', substr($m, $start, 4));\n$start += 4;\n $savepath = substr($m, $start, $len[1]);\n$start += $len[1];\n $ret['m'][$savepath] = array_values(unpack('Va/Vb/Vc/Vd/Ve/Vf', substr($m, $start, 24)));\n$ret['m'][$savepath][3] = sprintf('%u', $ret['m'][$savepath][3]\n& 0xffffffff);\n$ret['m'][$savepath][7] = $o;\n$o += $ret['m'][$savepath][2];\n$start += 24 + $ret['m'][$savepath][5];\n$ret['c'] |= $ret['m'][$savepath][4] & self::MASK;\n}\nreturn $ret;\n}\n\nstatic function extractFile($path, $entry, $fp)\n{\n$data = '';\n$c = $entry[2];\n\nwhile ($c) {\nif ($c < 8192) {\n$data .= @fread($fp, $c);\n$c = 0;\n} else {\n$c -= 8192;\n$data .= @fread($fp, 8192);\n}\n}\n\nif ($entry[4] & self::GZ) {\n$data = gzinflate($data);\n} elseif ($entry[4] & self::BZ2) {\n$data = bzdecompress($data);\n}\n\nif (strlen($data) != $entry[0]) {\ndie(\"Invalid internal .phar file (size error \" . strlen($data) . \" != \" .\n$stat[7] . \")\");\n}\n\nif ($entry[3] != sprintf(\"%u\", crc32($data) & 0xffffffff)) {\ndie(\"Invalid internal .phar file (checksum error)\");\n}\n\nreturn $data;\n}\n\nstatic function _removeTmpFiles($temp, $origdir)\n{\nchdir($temp);\n\nforeach (glob('*') as $f) {\nif (file_exists($f)) {\nis_dir($f) ? @rmdir($f) : @unlink($f);\nif (file_exists($f) && is_dir($f)) {\nself::_removeTmpFiles($f, getcwd());\n}\n}\n}\n\n@rmdir($temp);\nclearstatcache();\nchdir($origdir);\n}\n}\n\nExtract_Phar::go();\n__HALT_COMPILER(); ?>"; - static const int newstub_len = 6655; + static const int newstub_len = 6623; - return strpprintf(name_len + web_len + newstub_len, "%s%s%s%s%s%s%d%s%s%s", newstub0, web, newstub1_0, newstub1_1, index_php, newstub2, name_len + web_len + newstub_len, newstub3_0, newstub3_1, newstub3_2); + return strpprintf(name_len + web_len + newstub_len, "%s%s%s%s%s%s%d%s%s", newstub0, web, newstub1_0, newstub1_1, index_php, newstub2, name_len + web_len + newstub_len, newstub3_0, newstub3_1); } diff --git a/ext/phar/tar.c b/ext/phar/tar.c index 37663ca917..9de3047f7c 100644 --- a/ext/phar/tar.c +++ b/ext/phar/tar.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | TAR archive support for Phar | +----------------------------------------------------------------------+ - | Copyright (c) 2005-2017 The PHP Group | + | Copyright (c) 2005-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -19,9 +19,9 @@ #include "phar_internal.h" -static php_uint32 phar_tar_number(char *buf, int len) /* {{{ */ +static uint32_t phar_tar_number(char *buf, int len) /* {{{ */ { - php_uint32 num = 0; + uint32_t num = 0; int i = 0; while (i < len && buf[i] == ' ') { @@ -62,7 +62,7 @@ static php_uint32 phar_tar_number(char *buf, int len) /* {{{ */ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -static int phar_tar_octal(char *buf, php_uint32 val, int len) /* {{{ */ +static int phar_tar_octal(char *buf, uint32_t val, int len) /* {{{ */ { char *p = buf; int s = len; @@ -84,9 +84,9 @@ static int phar_tar_octal(char *buf, php_uint32 val, int len) /* {{{ */ } /* }}} */ -static php_uint32 phar_tar_checksum(char *buf, int len) /* {{{ */ +static uint32_t phar_tar_checksum(char *buf, int len) /* {{{ */ { - php_uint32 sum = 0; + uint32_t sum = 0; char *end = buf + len; while (buf != end) { @@ -100,8 +100,8 @@ static php_uint32 phar_tar_checksum(char *buf, int len) /* {{{ */ int phar_is_tar(char *buf, char *fname) /* {{{ */ { tar_header *header = (tar_header *) buf; - php_uint32 checksum = phar_tar_number(header->checksum, sizeof(header->checksum)); - php_uint32 ret; + uint32_t checksum = phar_tar_number(header->checksum, sizeof(header->checksum)); + uint32_t ret; char save[sizeof(header->checksum)], *bname; /* assume that the first filename in a tar won't begin with <?php */ @@ -202,13 +202,13 @@ static size_t strnlen(const char *s, size_t maxlen) { } #endif -int phar_parse_tarfile(php_stream* fp, char *fname, int fname_len, char *alias, int alias_len, phar_archive_data** pphar, int is_data, php_uint32 compression, char **error) /* {{{ */ +int phar_parse_tarfile(php_stream* fp, char *fname, int fname_len, char *alias, int alias_len, phar_archive_data** pphar, int is_data, uint32_t compression, char **error) /* {{{ */ { char buf[512], *actual_alias = NULL, *p; phar_entry_info entry = {0}; size_t pos = 0, read, totalsize; tar_header *hdr; - php_uint32 sum1, sum2, size, old; + uint32_t sum1, sum2, size, old; phar_archive_data *myphar, *actual; int last_was_longlink = 0; int linkname_len; @@ -299,7 +299,7 @@ bail: | ((((unsigned char*)(buffer))[1]) << 8) \ | (((unsigned char*)(buffer))[0])) #else -# define PHAR_GET_32(buffer) (php_uint32) *(buffer) +# define PHAR_GET_32(buffer) (uint32_t) *(buffer) #endif myphar->sig_flags = PHAR_GET_32(buf); if (FAILURE == phar_verify_signature(fp, php_stream_tell(fp) - size - 512, myphar->sig_flags, buf + 8, size - 8, fname, &myphar->signature, &myphar->sig_len, error)) { @@ -959,6 +959,8 @@ int phar_tar_flush(phar_archive_data *phar, char *user_stub, zend_long len, int entry.tar_type = '0'; entry.phar = phar; entry.fp_type = PHAR_MOD; + entry.fp = NULL; + entry.filename = NULL; if (phar->is_persistent) { if (error) { @@ -977,6 +979,7 @@ int phar_tar_flush(phar_archive_data *phar, char *user_stub, zend_long len, int entry.filename_len = sizeof(".phar/alias.txt")-1; entry.fp = php_stream_fopen_tmpfile(); if (entry.fp == NULL) { + efree(entry.filename); spprintf(error, 0, "phar error: unable to create temporary file"); return -1; } @@ -984,6 +987,8 @@ int phar_tar_flush(phar_archive_data *phar, char *user_stub, zend_long len, int if (error) { spprintf(error, 0, "unable to set alias in tar-based phar \"%s\"", phar->fname); } + php_stream_close(entry.fp); + efree(entry.filename); return EOF; } @@ -993,8 +998,12 @@ int phar_tar_flush(phar_archive_data *phar, char *user_stub, zend_long len, int if (error) { spprintf(error, 0, "unable to set alias in tar-based phar \"%s\"", phar->fname); } + php_stream_close(entry.fp); + efree(entry.filename); return EOF; } + /* At this point the entry is saved into the manifest. The manifest destroy + routine will care about any resources to be freed. */ } else { zend_hash_str_del(&phar->manifest, ".phar/alias.txt", sizeof(".phar/alias.txt")-1); } @@ -1230,12 +1239,12 @@ nostub: } #ifdef WORDS_BIGENDIAN # define PHAR_SET_32(var, buffer) \ - *(php_uint32 *)(var) = (((((unsigned char*)&(buffer))[3]) << 24) \ + *(uint32_t *)(var) = (((((unsigned char*)&(buffer))[3]) << 24) \ | ((((unsigned char*)&(buffer))[2]) << 16) \ | ((((unsigned char*)&(buffer))[1]) << 8) \ | (((unsigned char*)&(buffer))[0])) #else -# define PHAR_SET_32(var, buffer) *(php_uint32 *)(var) = (php_uint32) (buffer) +# define PHAR_SET_32(var, buffer) *(uint32_t *)(var) = (uint32_t) (buffer) #endif PHAR_SET_32(sigbuf, phar->sig_flags); PHAR_SET_32(sigbuf + 4, signature_length); diff --git a/ext/phar/tar.h b/ext/phar/tar.h index 6d769cb8ab..6284103eed 100644 --- a/ext/phar/tar.h +++ b/ext/phar/tar.h @@ -4,7 +4,7 @@ +----------------------------------------------------------------------+ | TAR archive support for Phar | +----------------------------------------------------------------------+ - | Copyright (c) 2005-2017 The PHP Group | + | Copyright (c) 2005-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/phar/tests/bug65414.phpt b/ext/phar/tests/bug65414.phpt new file mode 100644 index 0000000000..964ec72870 --- /dev/null +++ b/ext/phar/tests/bug65414.phpt @@ -0,0 +1,36 @@ +--TEST-- +Bug #65414 Injection (A1) in .phar files magic .phar directory +--SKIPIF-- +<?php if (!extension_loaded("phar")) die("skip"); ?> +--INI-- +phar.readonly = 0 +--FILE-- +<?php +$phar = new \Phar(__DIR__ . '/bug65414.phar', 0, 'bug65414.phar'); +$bads = [ + '.phar/injected-1.txt', + '/.phar/injected-2.txt', + '//.phar/injected-3.txt', + '/.phar/', +]; +foreach ($bads as $bad) { + echo $bad . ':'; + try { + $phar->addFromString($bad, 'this content is injected'); + echo 'Failed to throw expected exception'; + } catch (BadMethodCallException $ex) { + echo $ex->getMessage() . PHP_EOL; + } +} +echo 'done' . PHP_EOL; +?> +--CLEAN-- +<?php +unlink(__DIR__ . '/bug65414.phar'); +?> +--EXPECT-- +.phar/injected-1.txt:Cannot create any files in magic ".phar" directory +/.phar/injected-2.txt:Cannot create any files in magic ".phar" directory +//.phar/injected-3.txt:Entry //.phar/injected-3.txt does not exist and cannot be created: phar error: invalid path "//.phar/injected-3.txt" contains double slash +/.phar/:Cannot create any files in magic ".phar" directory +done diff --git a/ext/phar/tests/bug74383.phpt b/ext/phar/tests/bug74383.phpt index 366c4fcb9b..4257629ff5 100644 --- a/ext/phar/tests/bug74383.phpt +++ b/ext/phar/tests/bug74383.phpt @@ -17,4 +17,4 @@ echo (int) $rm->getParameters()[0]->isOptional(); --EXPECT-- 1 0 -1
\ No newline at end of file +1 diff --git a/ext/phar/tests/cache_list/copyonwrite11.phar.phpt b/ext/phar/tests/cache_list/copyonwrite11.phar.phpt index c3489e44ad..c3851e6494 100644 --- a/ext/phar/tests/cache_list/copyonwrite11.phar.phpt +++ b/ext/phar/tests/cache_list/copyonwrite11.phar.phpt @@ -18,5 +18,5 @@ echo strlen($p2->getStub()),"\n"; echo "ok\n"; __HALT_COMPILER(); ?> " -6675 +6643 ok
\ No newline at end of file diff --git a/ext/phar/tests/cache_list/files/frontcontroller17.phar b/ext/phar/tests/cache_list/files/frontcontroller17.phar Binary files differindex b83d41fd5b..d9b8330e63 100644 --- a/ext/phar/tests/cache_list/files/frontcontroller17.phar +++ b/ext/phar/tests/cache_list/files/frontcontroller17.phar diff --git a/ext/phar/tests/cache_list/files/frontcontroller17.phar.inc b/ext/phar/tests/cache_list/files/frontcontroller17.phar.inc index 85b8729f31..715479552a 100644 --- a/ext/phar/tests/cache_list/files/frontcontroller17.phar.inc +++ b/ext/phar/tests/cache_list/files/frontcontroller17.phar.inc @@ -6,7 +6,7 @@ echo "hi"; '; $a->setStub('<?php try { -Phar::webPhar("test.phar", "/index.php", null, array(), "sort"); +Phar::webPhar("test.phar", "/index.php", null, array(), function() { throw new Exception; }); } catch (Exception $e) { die($e->getMessage() . "\n"); } diff --git a/ext/phar/tests/cache_list/files/nophar.phar b/ext/phar/tests/cache_list/files/nophar.phar Binary files differindex 4eb3083c92..e6bf37a845 100644 --- a/ext/phar/tests/cache_list/files/nophar.phar +++ b/ext/phar/tests/cache_list/files/nophar.phar diff --git a/ext/phar/tests/cache_list/files/openssl.phar b/ext/phar/tests/cache_list/files/openssl.phar Binary files differindex f3864d7faa..1e6f5e2f7e 100644 --- a/ext/phar/tests/cache_list/files/openssl.phar +++ b/ext/phar/tests/cache_list/files/openssl.phar diff --git a/ext/phar/tests/cache_list/frontcontroller32.phpt b/ext/phar/tests/cache_list/frontcontroller32.phpt index 59116907a5..cb9abb8c19 100644 --- a/ext/phar/tests/cache_list/frontcontroller32.phpt +++ b/ext/phar/tests/cache_list/frontcontroller32.phpt @@ -13,4 +13,4 @@ Content-type: text/html; charset=UTF-8 --FILE_EXTERNAL-- files/frontcontroller17.phar --EXPECTF-- -%ahar error: failed to call rewrite callback
\ No newline at end of file +%ahar error: rewrite callback must return a string or false diff --git a/ext/phar/tests/files/frontcontroller17.phar b/ext/phar/tests/files/frontcontroller17.phar Binary files differindex b83d41fd5b..4dab78a9ec 100644 --- a/ext/phar/tests/files/frontcontroller17.phar +++ b/ext/phar/tests/files/frontcontroller17.phar diff --git a/ext/phar/tests/files/frontcontroller17.phar.inc b/ext/phar/tests/files/frontcontroller17.phar.inc index 85b8729f31..715479552a 100644 --- a/ext/phar/tests/files/frontcontroller17.phar.inc +++ b/ext/phar/tests/files/frontcontroller17.phar.inc @@ -6,7 +6,7 @@ echo "hi"; '; $a->setStub('<?php try { -Phar::webPhar("test.phar", "/index.php", null, array(), "sort"); +Phar::webPhar("test.phar", "/index.php", null, array(), function() { throw new Exception; }); } catch (Exception $e) { die($e->getMessage() . "\n"); } diff --git a/ext/phar/tests/files/include_path2.phar b/ext/phar/tests/files/include_path2.phar Binary files differindex bb0ba79c84..190b60e9a8 100644 --- a/ext/phar/tests/files/include_path2.phar +++ b/ext/phar/tests/files/include_path2.phar diff --git a/ext/phar/tests/files/nophar.phar b/ext/phar/tests/files/nophar.phar Binary files differindex 4eb3083c92..e9d3fef414 100644 --- a/ext/phar/tests/files/nophar.phar +++ b/ext/phar/tests/files/nophar.phar diff --git a/ext/phar/tests/files/openssl.phar b/ext/phar/tests/files/openssl.phar Binary files differindex f3864d7faa..1e6f5e2f7e 100644 --- a/ext/phar/tests/files/openssl.phar +++ b/ext/phar/tests/files/openssl.phar diff --git a/ext/phar/tests/frontcontroller32.phpt b/ext/phar/tests/frontcontroller32.phpt index 58f6fffa00..032d0f571d 100644 --- a/ext/phar/tests/frontcontroller32.phpt +++ b/ext/phar/tests/frontcontroller32.phpt @@ -12,4 +12,4 @@ Content-type: text/html; charset=UTF-8 --FILE_EXTERNAL-- files/frontcontroller17.phar --EXPECTF-- -%ahar error: failed to call rewrite callback
\ No newline at end of file +%ahar error: rewrite callback must return a string or false diff --git a/ext/phar/tests/open_for_write_existing_b.phpt b/ext/phar/tests/open_for_write_existing_b.phpt index ef48906de1..448b3a3abc 100644 --- a/ext/phar/tests/open_for_write_existing_b.phpt +++ b/ext/phar/tests/open_for_write_existing_b.phpt @@ -21,7 +21,7 @@ $files['b/c.php'] = '<?php echo "This is b/c\n"; ?>'; include 'files/phar_test.inc'; function err_handler($errno, $errstr, $errfile, $errline) { - echo "Catchable fatal error: $errstr in $errfile on line $errline\n"; + echo "Recoverable fatal error: $errstr in $errfile on line $errline\n"; } set_error_handler("err_handler", E_RECOVERABLE_ERROR); diff --git a/ext/phar/tests/open_for_write_existing_b_5_2.phpt b/ext/phar/tests/open_for_write_existing_b_5_2.phpt index 03edd54e5f..b72098c773 100644 --- a/ext/phar/tests/open_for_write_existing_b_5_2.phpt +++ b/ext/phar/tests/open_for_write_existing_b_5_2.phpt @@ -19,7 +19,7 @@ $files['b/c.php'] = '<?php echo "This is b/c\n"; ?>'; include 'files/phar_test.inc'; function err_handler($errno, $errstr, $errfile, $errline) { - echo "Catchable fatal error: $errstr in $errfile on line $errline\n"; + echo "Recoverable fatal error: $errstr in $errfile on line $errline\n"; } set_error_handler("err_handler", E_RECOVERABLE_ERROR); diff --git a/ext/phar/tests/open_for_write_newfile_b.phpt b/ext/phar/tests/open_for_write_newfile_b.phpt index 45131c4892..2926140ff5 100644 --- a/ext/phar/tests/open_for_write_newfile_b.phpt +++ b/ext/phar/tests/open_for_write_newfile_b.phpt @@ -21,7 +21,7 @@ $files['b/c.php'] = '<?php echo "This is b/c\n"; ?>'; include 'files/phar_test.inc'; function err_handler($errno, $errstr, $errfile, $errline) { - echo "Catchable fatal error: $errstr in $errfile on line $errline\n"; + echo "Recoverable fatal error: $errstr in $errfile on line $errline\n"; } set_error_handler("err_handler", E_RECOVERABLE_ERROR); diff --git a/ext/phar/tests/open_for_write_newfile_b_5_2.phpt b/ext/phar/tests/open_for_write_newfile_b_5_2.phpt index 7d43f1c8ee..8d84379fba 100644 --- a/ext/phar/tests/open_for_write_newfile_b_5_2.phpt +++ b/ext/phar/tests/open_for_write_newfile_b_5_2.phpt @@ -19,7 +19,7 @@ $files['b/c.php'] = '<?php echo "This is b/c\n"; ?>'; include 'files/phar_test.inc'; function err_handler($errno, $errstr, $errfile, $errline) { - echo "Catchable fatal error: $errstr in $errfile on line $errline\n"; + echo "Recoverable fatal error: $errstr in $errfile on line $errline\n"; } set_error_handler("err_handler", E_RECOVERABLE_ERROR); diff --git a/ext/phar/tests/phar_commitwrite.phpt b/ext/phar/tests/phar_commitwrite.phpt index 00343ca0a7..cd9e52f36f 100644 --- a/ext/phar/tests/phar_commitwrite.phpt +++ b/ext/phar/tests/phar_commitwrite.phpt @@ -29,7 +29,7 @@ unlink(dirname(__FILE__) . '/brandnewphar.phar'); __HALT_COMPILER(); ?> --EXPECT-- -int(6673) +int(6641) string(200) "<?php function __autoload($class) { diff --git a/ext/phar/tests/phar_convert_repeated.phpt b/ext/phar/tests/phar_convert_repeated.phpt index 7880bf40fe..99ff90197b 100644 --- a/ext/phar/tests/phar_convert_repeated.phpt +++ b/ext/phar/tests/phar_convert_repeated.phpt @@ -123,7 +123,7 @@ NULL bool(true) bool(false) bool(false) -int(6673) +int(6641) NULL ================= convertToZip() ===================== bool(false) diff --git a/ext/phar/tests/phar_create_in_cwd.phpt b/ext/phar/tests/phar_create_in_cwd.phpt index 57b2432dff..cafc8a1cfb 100644 --- a/ext/phar/tests/phar_create_in_cwd.phpt +++ b/ext/phar/tests/phar_create_in_cwd.phpt @@ -32,7 +32,7 @@ __HALT_COMPILER(); unlink(dirname(__FILE__) . '/brandnewphar.phar'); ?> --EXPECT-- -int(6673) +int(6641) string(200) "<?php function __autoload($class) { diff --git a/ext/phar/tests/phar_createdefaultstub.phpt b/ext/phar/tests/phar_createdefaultstub.phpt index f2ee297740..e074d649bd 100644 --- a/ext/phar/tests/phar_createdefaultstub.phpt +++ b/ext/phar/tests/phar_createdefaultstub.phpt @@ -34,7 +34,7 @@ echo $e->getMessage() . "\n"; ?> ===DONE=== --EXPECT-- -string(6673) "<?php +string(6641) "<?php $web = 'index.php'; @@ -144,21 +144,21 @@ const GZ = 0x1000; const BZ2 = 0x2000; const MASK = 0x3000; const START = 'index.php'; -const LEN = 6675; +const LEN = 6643; static function go($return = false) { $fp = fopen(__FILE__, 'rb'); fseek($fp, self::LEN); -$L = unpack('V', $a = (binary)fread($fp, 4)); -$m = (binary)''; +$L = unpack('V', $a = fread($fp, 4)); +$m = ''; do { $read = 8192; if ($L[1] - strlen($m) < 8192) { $read = $L[1] - strlen($m); } -$last = (binary)fread($fp, $read); +$last = fread($fp, $read); $m .= $last; } while (strlen($last) && strlen($m) < $L[1]); @@ -298,7 +298,7 @@ die("Invalid internal .phar file (size error " . strlen($data) . " != " . $stat[7] . ")"); } -if ($entry[3] != sprintf("%u", crc32((binary)$data) & 0xffffffff)) { +if ($entry[3] != sprintf("%u", crc32($data) & 0xffffffff)) { die("Invalid internal .phar file (checksum error)"); } @@ -328,7 +328,7 @@ Extract_Phar::go(); __HALT_COMPILER(); ?>" ============================================================================ ============================================================================ -string(6684) "<?php +string(6652) "<?php $web = 'index.php'; @@ -438,21 +438,21 @@ const GZ = 0x1000; const BZ2 = 0x2000; const MASK = 0x3000; const START = 'my/custom/thingy.php'; -const LEN = 6686; +const LEN = 6654; static function go($return = false) { $fp = fopen(__FILE__, 'rb'); fseek($fp, self::LEN); -$L = unpack('V', $a = (binary)fread($fp, 4)); -$m = (binary)''; +$L = unpack('V', $a = fread($fp, 4)); +$m = ''; do { $read = 8192; if ($L[1] - strlen($m) < 8192) { $read = $L[1] - strlen($m); } -$last = (binary)fread($fp, $read); +$last = fread($fp, $read); $m .= $last; } while (strlen($last) && strlen($m) < $L[1]); @@ -592,7 +592,7 @@ die("Invalid internal .phar file (size error " . strlen($data) . " != " . $stat[7] . ")"); } -if ($entry[3] != sprintf("%u", crc32((binary)$data) & 0xffffffff)) { +if ($entry[3] != sprintf("%u", crc32($data) & 0xffffffff)) { die("Invalid internal .phar file (checksum error)"); } @@ -622,7 +622,7 @@ Extract_Phar::go(); __HALT_COMPILER(); ?>" ============================================================================ ============================================================================ -int(7064) +int(7032) ============================================================================ ============================================================================ Illegal filename passed in for stub creation, was 401 characters long, and only 400 or less is allowed @@ -630,7 +630,7 @@ Illegal filename passed in for stub creation, was 401 characters long, and only ============================================================================ ============================================================================ ============================================================================ -string(6686) "<?php +string(6654) "<?php $web = 'the/web.php'; @@ -740,21 +740,21 @@ const GZ = 0x1000; const BZ2 = 0x2000; const MASK = 0x3000; const START = 'my/custom/thingy.php'; -const LEN = 6688; +const LEN = 6656; static function go($return = false) { $fp = fopen(__FILE__, 'rb'); fseek($fp, self::LEN); -$L = unpack('V', $a = (binary)fread($fp, 4)); -$m = (binary)''; +$L = unpack('V', $a = fread($fp, 4)); +$m = ''; do { $read = 8192; if ($L[1] - strlen($m) < 8192) { $read = $L[1] - strlen($m); } -$last = (binary)fread($fp, $read); +$last = fread($fp, $read); $m .= $last; } while (strlen($last) && strlen($m) < $L[1]); @@ -894,7 +894,7 @@ die("Invalid internal .phar file (size error " . strlen($data) . " != " . $stat[7] . ")"); } -if ($entry[3] != sprintf("%u", crc32((binary)$data) & 0xffffffff)) { +if ($entry[3] != sprintf("%u", crc32($data) & 0xffffffff)) { die("Invalid internal .phar file (checksum error)"); } @@ -924,6 +924,6 @@ Extract_Phar::go(); __HALT_COMPILER(); ?>" ============================================================================ ============================================================================ -int(7064) +int(7032) Illegal web filename passed in for stub creation, was 401 characters long, and only 400 or less is allowed ===DONE=== diff --git a/ext/phar/tests/phar_offset_check.phpt b/ext/phar/tests/phar_offset_check.phpt index 303fed1c97..7609f2051f 100644 --- a/ext/phar/tests/phar_offset_check.phpt +++ b/ext/phar/tests/phar_offset_check.phpt @@ -70,8 +70,8 @@ var_dump($phar->getAlias()); Entry .phar/stub.php does not exist Entry .phar/alias.txt does not exist Cannot set stub ".phar/stub.php" directly in phar "%sphar_offset_check.phar.php", use setStub -int(6675) -int(6675) +int(6643) +int(6643) Cannot set alias ".phar/alias.txt" directly in phar "%sphar_offset_check.phar.php", use setAlias string(5) "susan" string(5) "susan" diff --git a/ext/phar/tests/phar_setdefaultstub.phpt b/ext/phar/tests/phar_setdefaultstub.phpt index c8d12e9711..fc7143af7b 100644 --- a/ext/phar/tests/phar_setdefaultstub.phpt +++ b/ext/phar/tests/phar_setdefaultstub.phpt @@ -54,7 +54,7 @@ try { unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar'); ?> --EXPECT-- -string(6675) "<?php +string(6643) "<?php $web = 'index.php'; @@ -164,21 +164,21 @@ const GZ = 0x1000; const BZ2 = 0x2000; const MASK = 0x3000; const START = 'index.php'; -const LEN = 6675; +const LEN = 6643; static function go($return = false) { $fp = fopen(__FILE__, 'rb'); fseek($fp, self::LEN); -$L = unpack('V', $a = (binary)fread($fp, 4)); -$m = (binary)''; +$L = unpack('V', $a = fread($fp, 4)); +$m = ''; do { $read = 8192; if ($L[1] - strlen($m) < 8192) { $read = $L[1] - strlen($m); } -$last = (binary)fread($fp, $read); +$last = fread($fp, $read); $m .= $last; } while (strlen($last) && strlen($m) < $L[1]); @@ -318,7 +318,7 @@ die("Invalid internal .phar file (size error " . strlen($data) . " != " . $stat[7] . ")"); } -if ($entry[3] != sprintf("%u", crc32((binary)$data) & 0xffffffff)) { +if ($entry[3] != sprintf("%u", crc32($data) & 0xffffffff)) { die("Invalid internal .phar file (checksum error)"); } @@ -349,7 +349,7 @@ __HALT_COMPILER(); ?> " ============================================================================ ============================================================================ -string(6686) "<?php +string(6654) "<?php $web = 'index.php'; @@ -459,21 +459,21 @@ const GZ = 0x1000; const BZ2 = 0x2000; const MASK = 0x3000; const START = 'my/custom/thingy.php'; -const LEN = 6686; +const LEN = 6654; static function go($return = false) { $fp = fopen(__FILE__, 'rb'); fseek($fp, self::LEN); -$L = unpack('V', $a = (binary)fread($fp, 4)); -$m = (binary)''; +$L = unpack('V', $a = fread($fp, 4)); +$m = ''; do { $read = 8192; if ($L[1] - strlen($m) < 8192) { $read = $L[1] - strlen($m); } -$last = (binary)fread($fp, $read); +$last = fread($fp, $read); $m .= $last; } while (strlen($last) && strlen($m) < $L[1]); @@ -613,7 +613,7 @@ die("Invalid internal .phar file (size error " . strlen($data) . " != " . $stat[7] . ")"); } -if ($entry[3] != sprintf("%u", crc32((binary)$data) & 0xffffffff)) { +if ($entry[3] != sprintf("%u", crc32($data) & 0xffffffff)) { die("Invalid internal .phar file (checksum error)"); } @@ -644,7 +644,7 @@ __HALT_COMPILER(); ?> " ============================================================================ ============================================================================ -string(6688) "<?php +string(6656) "<?php $web = 'the/web.php'; @@ -754,21 +754,21 @@ const GZ = 0x1000; const BZ2 = 0x2000; const MASK = 0x3000; const START = 'my/custom/thingy.php'; -const LEN = 6688; +const LEN = 6656; static function go($return = false) { $fp = fopen(__FILE__, 'rb'); fseek($fp, self::LEN); -$L = unpack('V', $a = (binary)fread($fp, 4)); -$m = (binary)''; +$L = unpack('V', $a = fread($fp, 4)); +$m = ''; do { $read = 8192; if ($L[1] - strlen($m) < 8192) { $read = $L[1] - strlen($m); } -$last = (binary)fread($fp, $read); +$last = fread($fp, $read); $m .= $last; } while (strlen($last) && strlen($m) < $L[1]); @@ -908,7 +908,7 @@ die("Invalid internal .phar file (size error " . strlen($data) . " != " . $stat[7] . ")"); } -if ($entry[3] != sprintf("%u", crc32((binary)$data) & 0xffffffff)) { +if ($entry[3] != sprintf("%u", crc32($data) & 0xffffffff)) { die("Invalid internal .phar file (checksum error)"); } @@ -939,6 +939,6 @@ __HALT_COMPILER(); ?> " ============================================================================ ============================================================================ -int(7066) +int(7034) Illegal filename passed in for stub creation, was 401 characters long, and only 400 or less is allowed ===DONE=== diff --git a/ext/phar/tests/tar/open_for_write_existing_b.phpt b/ext/phar/tests/tar/open_for_write_existing_b.phpt index fa631e6181..3c7c67e941 100644 --- a/ext/phar/tests/tar/open_for_write_existing_b.phpt +++ b/ext/phar/tests/tar/open_for_write_existing_b.phpt @@ -31,7 +31,7 @@ $phar->stopBuffering(); ini_set('phar.readonly', 1); function err_handler($errno, $errstr, $errfile, $errline) { - echo "Catchable fatal error: $errstr in $errfile on line $errline\n"; + echo "Recoverable fatal error: $errstr in $errfile on line $errline\n"; } set_error_handler("err_handler", E_RECOVERABLE_ERROR); diff --git a/ext/phar/tests/tar/open_for_write_existing_b_5_2.phpt b/ext/phar/tests/tar/open_for_write_existing_b_5_2.phpt index a6fea062ad..19c2f4023a 100644 --- a/ext/phar/tests/tar/open_for_write_existing_b_5_2.phpt +++ b/ext/phar/tests/tar/open_for_write_existing_b_5_2.phpt @@ -29,7 +29,7 @@ $phar->stopBuffering(); ini_set('phar.readonly', 1); function err_handler($errno, $errstr, $errfile, $errline) { - echo "Catchable fatal error: $errstr in $errfile on line $errline\n"; + echo "Recoverable fatal error: $errstr in $errfile on line $errline\n"; } set_error_handler("err_handler", E_RECOVERABLE_ERROR); diff --git a/ext/phar/tests/tar/open_for_write_newfile_b.phpt b/ext/phar/tests/tar/open_for_write_newfile_b.phpt index 2ea557b8a0..83a510436a 100644 --- a/ext/phar/tests/tar/open_for_write_newfile_b.phpt +++ b/ext/phar/tests/tar/open_for_write_newfile_b.phpt @@ -31,7 +31,7 @@ $phar->stopBuffering(); ini_set('phar.readonly', 1); function err_handler($errno, $errstr, $errfile, $errline) { - echo "Catchable fatal error: $errstr in $errfile on line $errline\n"; + echo "Recoverable fatal error: $errstr in $errfile on line $errline\n"; } set_error_handler("err_handler", E_RECOVERABLE_ERROR); diff --git a/ext/phar/tests/tar/open_for_write_newfile_b_5_2.phpt b/ext/phar/tests/tar/open_for_write_newfile_b_5_2.phpt index 1bb02a0bec..7906bc9ddf 100644 --- a/ext/phar/tests/tar/open_for_write_newfile_b_5_2.phpt +++ b/ext/phar/tests/tar/open_for_write_newfile_b_5_2.phpt @@ -29,7 +29,7 @@ $phar->stopBuffering(); ini_set('phar.readonly', 1); function err_handler($errno, $errstr, $errfile, $errline) { - echo "Catchable fatal error: $errstr in $errfile on line $errline\n"; + echo "Recoverable fatal error: $errstr in $errfile on line $errline\n"; } set_error_handler("err_handler", E_RECOVERABLE_ERROR); diff --git a/ext/phar/tests/tar/phar_convert_phar.phpt b/ext/phar/tests/tar/phar_convert_phar.phpt index b700f4a2b2..c827c218ed 100644 --- a/ext/phar/tests/tar/phar_convert_phar.phpt +++ b/ext/phar/tests/tar/phar_convert_phar.phpt @@ -47,12 +47,12 @@ __HALT_COMPILER(); ?> --EXPECT-- bool(false) -int(6673) +int(6641) bool(true) string(60) "<?php // tar-based phar archive stub file __HALT_COMPILER();" bool(true) -int(6673) +int(6641) bool(true) -int(6673) +int(6641) ===DONE=== diff --git a/ext/phar/tests/tar/phar_convert_phar2.phpt b/ext/phar/tests/tar/phar_convert_phar2.phpt index c3a38bd65b..e21a9843a5 100644 --- a/ext/phar/tests/tar/phar_convert_phar2.phpt +++ b/ext/phar/tests/tar/phar_convert_phar2.phpt @@ -49,14 +49,14 @@ __HALT_COMPILER(); ?> --EXPECT-- bool(false) -int(6673) +int(6641) bool(true) string(60) "<?php // tar-based phar archive stub file __HALT_COMPILER();" bool(true) int(4096) -int(6673) +int(6641) bool(true) bool(true) -int(6673) +int(6641) ===DONE=== diff --git a/ext/phar/tests/tar/phar_convert_phar3.phpt b/ext/phar/tests/tar/phar_convert_phar3.phpt index b6f7a160a1..39cf120d2d 100644 --- a/ext/phar/tests/tar/phar_convert_phar3.phpt +++ b/ext/phar/tests/tar/phar_convert_phar3.phpt @@ -49,14 +49,14 @@ __HALT_COMPILER(); ?> --EXPECT-- bool(false) -int(6673) +int(6641) bool(true) string(60) "<?php // tar-based phar archive stub file __HALT_COMPILER();" bool(true) int(8192) -int(6673) +int(6641) bool(true) bool(true) -int(6673) +int(6641) ===DONE=== diff --git a/ext/phar/tests/tar/phar_convert_phar4.phpt b/ext/phar/tests/tar/phar_convert_phar4.phpt index 3fcfd6cce5..3ad27dcbc8 100644 --- a/ext/phar/tests/tar/phar_convert_phar4.phpt +++ b/ext/phar/tests/tar/phar_convert_phar4.phpt @@ -14,7 +14,7 @@ $fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '2.phar'; $phar = new Phar($fname); $phar['a.txt'] = 'some text'; -$phar->setMetadata(b'hi'); +$phar->setMetadata('hi'); $phar->stopBuffering(); var_dump($phar->isFileFormat(Phar::TAR)); var_dump(strlen($phar->getStub())); @@ -54,7 +54,7 @@ __HALT_COMPILER(); ?> --EXPECT-- bool(false) -int(6673) +int(6641) string(2) "hi" bool(true) string(60) "<?php // tar-based phar archive stub file @@ -62,10 +62,10 @@ __HALT_COMPILER();" string(2) "hi" bool(true) int(4096) -int(6673) +int(6641) string(2) "hi" bool(true) bool(true) -int(6673) +int(6641) string(2) "hi" ===DONE=== diff --git a/ext/phar/tests/zip/open_for_write_existing_b.phpt b/ext/phar/tests/zip/open_for_write_existing_b.phpt index b997c68291..d1f963e9af 100644 --- a/ext/phar/tests/zip/open_for_write_existing_b.phpt +++ b/ext/phar/tests/zip/open_for_write_existing_b.phpt @@ -31,7 +31,7 @@ $phar->stopBuffering(); ini_set('phar.readonly', 1); function err_handler($errno, $errstr, $errfile, $errline) { - echo "Catchable fatal error: $errstr in $errfile on line $errline\n"; + echo "Recoverable fatal error: $errstr in $errfile on line $errline\n"; } set_error_handler("err_handler", E_RECOVERABLE_ERROR); diff --git a/ext/phar/tests/zip/open_for_write_existing_b_5_2.phpt b/ext/phar/tests/zip/open_for_write_existing_b_5_2.phpt index b88a496326..522a1deda6 100644 --- a/ext/phar/tests/zip/open_for_write_existing_b_5_2.phpt +++ b/ext/phar/tests/zip/open_for_write_existing_b_5_2.phpt @@ -29,7 +29,7 @@ $phar->stopBuffering(); ini_set('phar.readonly', 1); function err_handler($errno, $errstr, $errfile, $errline) { - echo "Catchable fatal error: $errstr in $errfile on line $errline\n"; + echo "Recoverable fatal error: $errstr in $errfile on line $errline\n"; } set_error_handler("err_handler", E_RECOVERABLE_ERROR); diff --git a/ext/phar/tests/zip/open_for_write_newfile_b.phpt b/ext/phar/tests/zip/open_for_write_newfile_b.phpt index 96fd2e426e..9f5328ff91 100644 --- a/ext/phar/tests/zip/open_for_write_newfile_b.phpt +++ b/ext/phar/tests/zip/open_for_write_newfile_b.phpt @@ -31,7 +31,7 @@ $phar->stopBuffering(); ini_set('phar.readonly', 1); function err_handler($errno, $errstr, $errfile, $errline) { - echo "Catchable fatal error: $errstr in $errfile on line $errline\n"; + echo "Recoverable fatal error: $errstr in $errfile on line $errline\n"; } set_error_handler("err_handler", E_RECOVERABLE_ERROR); diff --git a/ext/phar/tests/zip/open_for_write_newfile_b_5_2.phpt b/ext/phar/tests/zip/open_for_write_newfile_b_5_2.phpt index 3032427bcc..2575201bd1 100644 --- a/ext/phar/tests/zip/open_for_write_newfile_b_5_2.phpt +++ b/ext/phar/tests/zip/open_for_write_newfile_b_5_2.phpt @@ -29,7 +29,7 @@ $phar->stopBuffering(); ini_set('phar.readonly', 1); function err_handler($errno, $errstr, $errfile, $errline) { - echo "Catchable fatal error: $errstr in $errfile on line $errline\n"; + echo "Recoverable fatal error: $errstr in $errfile on line $errline\n"; } set_error_handler("err_handler", E_RECOVERABLE_ERROR); diff --git a/ext/phar/tests/zip/phar_convert_phar.phpt b/ext/phar/tests/zip/phar_convert_phar.phpt index f3c6b73f0b..9cf942bd0a 100644 --- a/ext/phar/tests/zip/phar_convert_phar.phpt +++ b/ext/phar/tests/zip/phar_convert_phar.phpt @@ -46,12 +46,12 @@ __HALT_COMPILER(); ?> --EXPECT-- bool(false) -int(6673) +int(6641) bool(true) string(60) "<?php // zip-based phar archive stub file __HALT_COMPILER();" bool(true) -int(6673) +int(6641) bool(true) -int(6673) +int(6641) ===DONE=== diff --git a/ext/phar/util.c b/ext/phar/util.c index 54ff13b5c0..48d5a256a2 100644 --- a/ext/phar/util.c +++ b/ext/phar/util.c @@ -3,7 +3,7 @@ | phar php single-file executable PHP extension | | utility functions | +----------------------------------------------------------------------+ - | Copyright (c) 2005-2017 The PHP Group | + | Copyright (c) 2005-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -178,7 +178,7 @@ int phar_mount_entry(phar_archive_data *phar, char *filename, int filename_len, return FAILURE; } - if (path_len >= sizeof(".phar")-1 && !memcmp(path, ".phar", sizeof(".phar")-1)) { + if (path_len >= (int)sizeof(".phar")-1 && !memcmp(path, ".phar", sizeof(".phar")-1)) { /* no creating magic phar files by mounting them */ return FAILURE; } @@ -199,13 +199,6 @@ int phar_mount_entry(phar_archive_data *phar, char *filename, int filename_len, entry.tmp = estrndup(filename, filename_len); } } -#if PHP_API_VERSION < 20100412 - if (PG(safe_mode) && !is_phar && (!php_checkuid(entry.tmp, NULL, CHECKUID_CHECK_FILE_AND_DIR))) { - efree(entry.tmp); - efree(entry.filename); - return FAILURE; - } -#endif filename = entry.tmp; /* only check openbasedir for files, not for phar streams */ @@ -1184,7 +1177,7 @@ char * phar_compress_filter(phar_entry_info * entry, int return_unknown) /* {{{ */ char * phar_decompress_filter(phar_entry_info * entry, int return_unknown) /* {{{ */ { - php_uint32 flags; + uint32_t flags; if (entry->is_modified) { flags = entry->old_flags; @@ -1232,7 +1225,7 @@ phar_entry_info *phar_get_entry_info_dir(phar_archive_data *phar, char *path, in *error = NULL; } - if (security && path_len >= sizeof(".phar")-1 && !memcmp(path, ".phar", sizeof(".phar")-1)) { + if (security && path_len >= (int)sizeof(".phar")-1 && !memcmp(path, ".phar", sizeof(".phar")-1)) { if (error) { spprintf(error, 4096, "phar error: cannot directly access magic \".phar\" directory or files within it"); } @@ -1410,7 +1403,7 @@ static int phar_call_openssl_signverify(int is_sign, php_stream *fp, zend_off_t ZVAL_EMPTY_STRING(&zp[0]); } - if (end != Z_STRLEN(zp[0])) { + if ((size_t)end != Z_STRLEN(zp[0])) { zval_dtor(&zp[0]); zval_dtor(&zp[1]); zval_dtor(&zp[2]); @@ -1480,7 +1473,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, php_uint32 sig_type, char *sig, int sig_len, char *fname, char **signature, int *signature_len, char **error) /* {{{ */ +int phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type, char *sig, int sig_len, char *fname, char **signature, int *signature_len, char **error) /* {{{ */ { int read_size, len; zend_off_t read_len; @@ -1571,7 +1564,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ EVP_VerifyInit(md_ctx, mdtype); read_len = end_of_phar; - if (read_len > sizeof(buf)) { + if ((size_t)read_len > sizeof(buf)) { read_size = sizeof(buf); } else { read_size = (int)read_len; @@ -1620,7 +1613,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ PHP_SHA512Init(&context); read_len = end_of_phar; - if (read_len > sizeof(buf)) { + if ((size_t)read_len > sizeof(buf)) { read_size = sizeof(buf); } else { read_size = (int)read_len; @@ -1660,7 +1653,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ PHP_SHA256Init(&context); read_len = end_of_phar; - if (read_len > sizeof(buf)) { + if ((size_t)read_len > sizeof(buf)) { read_size = sizeof(buf); } else { read_size = (int)read_len; @@ -1708,7 +1701,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ PHP_SHA1Init(&context); read_len = end_of_phar; - if (read_len > sizeof(buf)) { + if ((size_t)read_len > sizeof(buf)) { read_size = sizeof(buf); } else { read_size = (int)read_len; @@ -1748,7 +1741,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ PHP_MD5Init(&context); read_len = end_of_phar; - if (read_len > sizeof(buf)) { + if ((size_t)read_len > sizeof(buf)) { read_size = sizeof(buf); } else { read_size = (int)read_len; diff --git a/ext/phar/zip.c b/ext/phar/zip.c index 1c05fbd80f..d615e8adda 100644 --- a/ext/phar/zip.c +++ b/ext/phar/zip.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | ZIP archive support for Phar | +----------------------------------------------------------------------+ - | Copyright (c) 2007-2017 The PHP Group | + | Copyright (c) 2007-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -18,28 +18,28 @@ #include "phar_internal.h" -#define PHAR_GET_16(var) ((php_uint16)((((php_uint16)var[0]) & 0xff) | \ - (((php_uint16)var[1]) & 0xff) << 8)) -#define PHAR_GET_32(var) ((php_uint32)((((php_uint32)var[0]) & 0xff) | \ - (((php_uint32)var[1]) & 0xff) << 8 | \ - (((php_uint32)var[2]) & 0xff) << 16 | \ - (((php_uint32)var[3]) & 0xff) << 24)) -static inline void phar_write_32(char buffer[4], php_uint32 value) +#define PHAR_GET_16(var) ((uint16_t)((((uint16_t)var[0]) & 0xff) | \ + (((uint16_t)var[1]) & 0xff) << 8)) +#define PHAR_GET_32(var) ((uint32_t)((((uint32_t)var[0]) & 0xff) | \ + (((uint32_t)var[1]) & 0xff) << 8 | \ + (((uint32_t)var[2]) & 0xff) << 16 | \ + (((uint32_t)var[3]) & 0xff) << 24)) +static inline void phar_write_32(char buffer[4], uint32_t value) { buffer[3] = (unsigned char) ((value & 0xff000000) >> 24); buffer[2] = (unsigned char) ((value & 0xff0000) >> 16); buffer[1] = (unsigned char) ((value & 0xff00) >> 8); buffer[0] = (unsigned char) (value & 0xff); } -static inline void phar_write_16(char buffer[2], php_uint32 value) +static inline void phar_write_16(char buffer[2], uint32_t value) { buffer[1] = (unsigned char) ((value & 0xff00) >> 8); buffer[0] = (unsigned char) (value & 0xff); } -# define PHAR_SET_32(var, value) phar_write_32(var, (php_uint32) (value)); -# define PHAR_SET_16(var, value) phar_write_16(var, (php_uint16) (value)); +# define PHAR_SET_32(var, value) phar_write_32(var, (uint32_t) (value)); +# define PHAR_SET_16(var, value) phar_write_16(var, (uint16_t) (value)); -static int phar_zip_process_extra(php_stream *fp, phar_entry_info *entry, php_uint16 len) /* {{{ */ +static int phar_zip_process_extra(php_stream *fp, phar_entry_info *entry, uint16_t len) /* {{{ */ { union { phar_zip_extra_field_header header; @@ -143,7 +143,7 @@ static time_t phar_zip_d2u_time(char *cdtime, char *cddate) /* {{{ */ static void phar_zip_u2d_time(time_t time, char *dtime, char *ddate) /* {{{ */ { - php_uint16 ctime, cdate; + uint16_t ctime, cdate; struct tm *tm, tmbuf; tm = php_localtime_r(&time, &tmbuf); @@ -167,8 +167,8 @@ int phar_parse_zipfile(php_stream *fp, char *fname, int fname_len, char *alias, { phar_zip_dir_end locator; char buf[sizeof(locator) + 65536]; - zend_long size; - php_uint16 i; + size_t size; + uint16_t i; phar_archive_data *mydata = NULL; phar_entry_info entry = {0}; char *p = buf, *ext, *actual_alias = NULL; @@ -395,10 +395,9 @@ foundit: if (entry.filename_len == sizeof(".phar/signature.bin")-1 && !strncmp(entry.filename, ".phar/signature.bin", sizeof(".phar/signature.bin")-1)) { size_t read; php_stream *sigfile; - zend_off_t now; char *sig; - now = php_stream_tell(fp); + php_stream_tell(fp); pefree(entry.filename, entry.is_persistent); sigfile = php_stream_fopen_tmpfile(); if (!sigfile) { @@ -791,7 +790,7 @@ static int phar_zip_changed_apply_int(phar_entry_info *entry, void *arg) /* {{{ phar_zip_unix3 perms; phar_zip_central_dir_file central; struct _phar_zip_pass *p; - php_uint32 newcrc32; + uint32_t newcrc32; zend_off_t offset; int not_really_modified = 0; p = (struct _phar_zip_pass*) arg; @@ -822,7 +821,7 @@ static int phar_zip_changed_apply_int(phar_entry_info *entry, void *arg) /* {{{ PHAR_SET_16(perms.size, sizeof(perms) - 4); PHAR_SET_16(perms.perms, entry->flags & PHAR_ENT_PERM_MASK); { - php_uint32 crc = (php_uint32) ~0; + uint32_t crc = (uint32_t) ~0; CRC32(crc, perms.perms[0]); CRC32(crc, perms.perms[1]); PHAR_SET_32(perms.crc32, ~crc); @@ -848,7 +847,7 @@ static int phar_zip_changed_apply_int(phar_entry_info *entry, void *arg) /* {{{ /* do extra field for perms later */ if (entry->is_modified) { - php_uint32 loc; + uint32_t loc; php_stream_filter *filter; php_stream *efp; @@ -936,7 +935,7 @@ static int phar_zip_changed_apply_int(phar_entry_info *entry, void *arg) /* {{{ php_stream_flush(entry->cfp); php_stream_filter_remove(filter, 1); php_stream_seek(entry->cfp, 0, SEEK_END); - entry->compressed_filesize = (php_uint32) php_stream_tell(entry->cfp); + entry->compressed_filesize = (uint32_t) php_stream_tell(entry->cfp); PHAR_SET_32(central.compsize, entry->compressed_filesize); PHAR_SET_32(local.compsize, entry->compressed_filesize); /* generate crc on compressed file */ @@ -1110,14 +1109,14 @@ static int phar_zip_applysignature(phar_archive_data *phar, struct _phar_zip_pas char *signature, sigbuf[8]; phar_entry_info entry = {0}; php_stream *newfile; - zend_off_t tell, st; + zend_off_t tell; newfile = php_stream_fopen_tmpfile(); if (newfile == NULL) { spprintf(pass->error, 0, "phar error: unable to create temporary file for the signature file"); return FAILURE; } - st = tell = php_stream_tell(pass->filefp); + tell = php_stream_tell(pass->filefp); /* copy the local files, central directory, and the zip comment to generate the hash */ php_stream_seek(pass->filefp, 0, SEEK_SET); php_stream_copy_to_stream_ex(pass->filefp, newfile, tell, NULL); @@ -1193,7 +1192,7 @@ int phar_zip_flush(phar_archive_data *phar, char *user_stub, zend_long len, int char *temperr = NULL; struct _phar_zip_pass pass; phar_zip_dir_end eocd; - php_uint32 cdir_size, cdir_offset; + uint32_t cdir_size, cdir_offset; pass.error = &temperr; entry.flags = PHAR_ENT_PERM_DEF_FILE; |