Skip to content

Commit 20f7e08

Browse files
committed
ext/phar: Use more specialized types instead of int
1 parent 81d232f commit 20f7e08

File tree

5 files changed

+171
-176
lines changed

5 files changed

+171
-176
lines changed

ext/phar/phar.c

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ void phar_destroy_phar_data(phar_archive_data *phar) /* {{{ */
238238
/**
239239
* Delete refcount and destruct if needed. On destruct return 1 else 0.
240240
*/
241-
int phar_archive_delref(phar_archive_data *phar) /* {{{ */
241+
bool phar_archive_delref(phar_archive_data *phar) /* {{{ */
242242
{
243243
if (phar->is_persistent) {
244244
return 0;
@@ -481,7 +481,7 @@ void phar_entry_remove(phar_entry_data *idata, char **error) /* {{{ */
481481
/**
482482
* Open an already loaded phar
483483
*/
484-
int phar_open_parsed_phar(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
484+
static zend_result phar_open_parsed_phar(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
485485
{
486486
phar_archive_data *phar;
487487
#ifdef PHP_WIN32
@@ -559,7 +559,7 @@ int phar_open_parsed_phar(char *fname, size_t fname_len, char *alias, size_t ali
559559
* Attempt to serialize the data.
560560
* Callers are responsible for handling EG(exception) if one occurs.
561561
*/
562-
void phar_metadata_tracker_try_ensure_has_serialized_data(phar_metadata_tracker *tracker, int persistent) /* {{{ */
562+
void phar_metadata_tracker_try_ensure_has_serialized_data(phar_metadata_tracker *tracker, bool persistent) /* {{{ */
563563
{
564564
php_serialize_data_t metadata_hash;
565565
smart_str metadata_str = {0};
@@ -585,7 +585,7 @@ void phar_metadata_tracker_try_ensure_has_serialized_data(phar_metadata_tracker
585585
*
586586
* Precondition: phar_metadata_tracker_has_data is true
587587
*/
588-
int phar_metadata_tracker_unserialize_or_copy(phar_metadata_tracker *tracker, zval *metadata, int persistent, HashTable *unserialize_options, const char* method_name) /* {{{ */
588+
zend_result phar_metadata_tracker_unserialize_or_copy(phar_metadata_tracker *tracker, zval *metadata, bool persistent, HashTable *unserialize_options, const char* method_name) /* {{{ */
589589
{
590590
const bool has_unserialize_options = unserialize_options != NULL && zend_hash_num_elements(unserialize_options) > 0;
591591
/* It should be impossible to create a zval in a persistent phar/entry. */
@@ -626,7 +626,7 @@ int phar_metadata_tracker_unserialize_or_copy(phar_metadata_tracker *tracker, zv
626626
/**
627627
* Check if this has any data, serialized or as a raw value.
628628
*/
629-
bool phar_metadata_tracker_has_data(const phar_metadata_tracker *tracker, int persistent) /* {{{ */
629+
bool phar_metadata_tracker_has_data(const phar_metadata_tracker *tracker, bool persistent) /* {{{ */
630630
{
631631
ZEND_ASSERT(!persistent || Z_ISUNDEF(tracker->val));
632632
return !Z_ISUNDEF(tracker->val) || tracker->str != NULL;
@@ -636,7 +636,7 @@ bool phar_metadata_tracker_has_data(const phar_metadata_tracker *tracker, int pe
636636
/**
637637
* Free memory used to track the metadata and set all fields to be null/undef.
638638
*/
639-
void phar_metadata_tracker_free(phar_metadata_tracker *tracker, int persistent) /* {{{ */
639+
void phar_metadata_tracker_free(phar_metadata_tracker *tracker, bool persistent) /* {{{ */
640640
{
641641
/* Free the string before the zval in case the zval's destructor modifies the metadata */
642642
if (tracker->str) {
@@ -658,7 +658,7 @@ void phar_metadata_tracker_free(phar_metadata_tracker *tracker, int persistent)
658658
/**
659659
* Free memory used to track the metadata and set all fields to be null/undef.
660660
*/
661-
void phar_metadata_tracker_copy(phar_metadata_tracker *dest, const phar_metadata_tracker *source, int persistent) /* {{{ */
661+
void phar_metadata_tracker_copy(phar_metadata_tracker *dest, const phar_metadata_tracker *source, bool persistent) /* {{{ */
662662
{
663663
ZEND_ASSERT(dest != source);
664664
phar_metadata_tracker_free(dest, persistent);
@@ -694,7 +694,7 @@ void phar_metadata_tracker_clone(phar_metadata_tracker *tracker) /* {{{ */
694694
*
695695
* data is the serialized zval
696696
*/
697-
void phar_parse_metadata_lazy(const char *buffer, phar_metadata_tracker *tracker, uint32_t zip_metadata_len, int persistent) /* {{{ */
697+
void phar_parse_metadata_lazy(const char *buffer, phar_metadata_tracker *tracker, uint32_t zip_metadata_len, bool persistent) /* {{{ */
698698
{
699699
phar_metadata_tracker_free(tracker, persistent);
700700
if (zip_metadata_len) {
@@ -1302,7 +1302,7 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, size_t fname_len, ch
13021302
/**
13031303
* Create or open a phar for writing
13041304
*/
1305-
int phar_open_or_create_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
1305+
zend_result phar_open_or_create_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
13061306
{
13071307
const char *ext_str, *z;
13081308
char *my_error;
@@ -1379,7 +1379,9 @@ int phar_open_or_create_filename(char *fname, size_t fname_len, char *alias, siz
13791379
}
13801380
/* }}} */
13811381

1382-
int phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
1382+
static zend_result phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error);
1383+
1384+
zend_result phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
13831385
{
13841386
phar_archive_data *mydata;
13851387
php_stream *fp;
@@ -1402,7 +1404,7 @@ int phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, si
14021404
}
14031405

14041406
if (fp) {
1405-
if (phar_open_from_fp(fp, fname, fname_len, alias, alias_len, options, pphar, is_data, error) == SUCCESS) {
1407+
if (phar_open_from_fp(fp, fname, fname_len, alias, alias_len, options, pphar, error) == SUCCESS) {
14061408
if ((*pphar)->is_data || !PHAR_G(readonly)) {
14071409
(*pphar)->is_writeable = 1;
14081410
}
@@ -1532,18 +1534,18 @@ int phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, si
15321534
* that the manifest is proper, then pass it to phar_parse_pharfile(). SUCCESS
15331535
* or FAILURE is returned and pphar is set to a pointer to the phar's manifest
15341536
*/
1535-
int phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
1537+
zend_result phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
15361538
{
15371539
php_stream *fp;
15381540
zend_string *actual;
1539-
int ret, is_data = 0;
1541+
bool is_data = false;
15401542

15411543
if (error) {
15421544
*error = NULL;
15431545
}
15441546

15451547
if (!strstr(fname, ".phar")) {
1546-
is_data = 1;
1548+
is_data = true;
15471549
}
15481550

15491551
if (phar_open_parsed_phar(fname, fname_len, alias, alias_len, is_data, options, pphar, error) == SUCCESS) {
@@ -1574,7 +1576,7 @@ int phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t a
15741576
fname_len = ZSTR_LEN(actual);
15751577
}
15761578

1577-
ret = phar_open_from_fp(fp, fname, fname_len, alias, alias_len, options, pphar, is_data, error);
1579+
zend_result ret = phar_open_from_fp(fp, fname, fname_len, alias, alias_len, options, pphar, error);
15781580

15791581
if (actual) {
15801582
zend_string_release_ex(actual, 0);
@@ -1618,7 +1620,7 @@ static inline char *phar_strnstr(const char *buf, int buf_len, const char *searc
16181620
* that the manifest is proper, then pass it to phar_parse_pharfile(). SUCCESS
16191621
* or FAILURE is returned and pphar is set to a pointer to the phar's manifest
16201622
*/
1621-
static int phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, int is_data, char **error) /* {{{ */
1623+
static zend_result phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
16221624
{
16231625
static const char token[] = "__HALT_COMPILER();";
16241626
static const char zip_magic[] = "PK\x03\x04";
@@ -1956,7 +1958,7 @@ static int phar_check_str(const char *fname, const char *ext_str, size_t ext_len
19561958
* the last parameter should be set to tell the thing to assume that filename is the full path, and only to check the
19571959
* extension rules, not to iterate.
19581960
*/
1959-
int phar_detect_phar_fname_ext(const char *filename, size_t filename_len, const char **ext_str, size_t *ext_len, int executable, int for_create, int is_complete) /* {{{ */
1961+
zend_result phar_detect_phar_fname_ext(const char *filename, size_t filename_len, const char **ext_str, size_t *ext_len, int executable, int for_create, int is_complete) /* {{{ */
19601962
{
19611963
const char *pos, *slash;
19621964

@@ -2101,7 +2103,7 @@ int phar_detect_phar_fname_ext(const char *filename, size_t filename_len, const
21012103
}
21022104
/* }}} */
21032105

2104-
static int php_check_dots(const char *element, size_t n) /* {{{ */
2106+
static bool php_check_dots(const char *element, size_t n) /* {{{ */
21052107
{
21062108
for(n-- ; n != SIZE_MAX; --n) {
21072109
if (element[n] != '.') {
@@ -2237,7 +2239,7 @@ char *phar_fix_filepath(char *path, size_t *new_len, int use_cwd) /* {{{ */
22372239
*
22382240
* This is used by phar_parse_url()
22392241
*/
2240-
int phar_split_fname(const char *filename, size_t filename_len, char **arch, size_t *arch_len, char **entry, size_t *entry_len, int executable, int for_create) /* {{{ */
2242+
zend_result phar_split_fname(const char *filename, size_t filename_len, char **arch, size_t *arch_len, char **entry, size_t *entry_len, int executable, int for_create) /* {{{ */
22412243
{
22422244
const char *ext_str;
22432245
#ifdef PHP_WIN32
@@ -2314,7 +2316,7 @@ int phar_split_fname(const char *filename, size_t filename_len, char **arch, siz
23142316
* Invoked when a user calls Phar::mapPhar() from within an executing .phar
23152317
* to set up its manifest directly
23162318
*/
2317-
int phar_open_executed_filename(char *alias, size_t alias_len, char **error) /* {{{ */
2319+
zend_result phar_open_executed_filename(char *alias, size_t alias_len, char **error) /* {{{ */
23182320
{
23192321
if (error) {
23202322
*error = NULL;
@@ -2362,7 +2364,7 @@ int phar_open_executed_filename(char *alias, size_t alias_len, char **error) /*
23622364
fname = actual;
23632365
}
23642366

2365-
int ret = phar_open_from_fp(fp, ZSTR_VAL(fname), ZSTR_LEN(fname), alias, alias_len, REPORT_ERRORS, NULL, 0, error);
2367+
zend_result ret = phar_open_from_fp(fp, ZSTR_VAL(fname), ZSTR_LEN(fname), alias, alias_len, REPORT_ERRORS, NULL, error);
23662368

23672369
if (actual) {
23682370
zend_string_release_ex(actual, 0);
@@ -2375,10 +2377,8 @@ int phar_open_executed_filename(char *alias, size_t alias_len, char **error) /*
23752377
/**
23762378
* Validate the CRC32 of a file opened from within the phar
23772379
*/
2378-
int phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error, int process_zip) /* {{{ */
2380+
zend_result phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error, int process_zip) /* {{{ */
23792381
{
2380-
uint32_t crc = php_crc32_bulk_init();
2381-
int len = idata->internal_file->uncompressed_filesize, ret;
23822382
php_stream *fp = idata->fp;
23832383
phar_entry_info *entry = idata->internal_file;
23842384

@@ -2443,7 +2443,8 @@ int phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error,
24432443

24442444
php_stream_seek(fp, idata->zero, SEEK_SET);
24452445

2446-
ret = php_crc32_stream_bulk_update(&crc, fp, len);
2446+
uint32_t crc = php_crc32_bulk_init();
2447+
zend_result ret = php_crc32_stream_bulk_update(&crc, fp, idata->internal_file->uncompressed_filesize);
24472448

24482449
php_stream_seek(fp, idata->zero, SEEK_SET);
24492450

ext/phar/phar_internal.h

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -404,10 +404,8 @@ static inline void phar_unixify_path_separators(char *path, size_t path_len)
404404
}
405405
}
406406
#endif
407-
/**
408-
* validate an alias, returns 1 for success, 0 for failure
409-
*/
410-
static inline int phar_validate_alias(const char *alias, size_t alias_len) /* {{{ */
407+
408+
static inline bool phar_validate_alias(const char *alias, size_t alias_len) /* {{{ */
411409
{
412410
return !(memchr(alias, '/', alias_len) || memchr(alias, '\\', alias_len) || memchr(alias, ':', alias_len) ||
413411
memchr(alias, ';', alias_len) || memchr(alias, '\n', alias_len) || memchr(alias, '\r', alias_len));
@@ -439,16 +437,15 @@ void phar_request_initialize(void);
439437
void phar_object_init(void);
440438
void phar_destroy_phar_data(phar_archive_data *phar);
441439

442-
int phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error, int process_zip);
443-
int phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error);
444-
int phar_open_or_create_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
445-
int phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
446-
int phar_open_executed_filename(char *alias, size_t alias_len, char **error);
447-
int phar_free_alias(phar_archive_data *phar, char *alias, size_t alias_len);
448-
int phar_get_archive(phar_archive_data **archive, char *fname, size_t fname_len, char *alias, size_t alias_len, char **error);
449-
int phar_open_parsed_phar(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
450-
int phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type, char *sig, size_t sig_len, char *fname, char **signature, size_t *signature_len, char **error);
451-
int phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signature, size_t *signature_length, char **error);
440+
zend_result phar_postprocess_file(phar_entry_data *idata, uint32_t crc32, char **error, int process_zip);
441+
zend_result phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error);
442+
zend_result phar_open_or_create_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
443+
zend_result phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
444+
zend_result phar_open_executed_filename(char *alias, size_t alias_len, char **error);
445+
zend_result phar_free_alias(phar_archive_data *phar, char *alias, size_t alias_len);
446+
zend_result phar_get_archive(phar_archive_data **archive, char *fname, size_t fname_len, char *alias, size_t alias_len, char **error);
447+
zend_result phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type, char *sig, size_t sig_len, char *fname, char **signature, size_t *signature_len, char **error);
448+
zend_result phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signature, size_t *signature_length, char **error);
452449

453450
/* utility functions */
454451
zend_string *phar_create_default_stub(const char *index_php, const char *web_index, char **error);
@@ -457,28 +454,26 @@ char *phar_compress_filter(phar_entry_info * entry, int return_unknown);
457454

458455
/* void phar_remove_virtual_dirs(phar_archive_data *phar, char *filename, size_t filename_len); */
459456
void phar_add_virtual_dirs(phar_archive_data *phar, char *filename, size_t filename_len);
460-
int phar_mount_entry(phar_archive_data *phar, char *filename, size_t filename_len, char *path, size_t path_len);
457+
zend_result phar_mount_entry(phar_archive_data *phar, char *filename, size_t filename_len, char *path, size_t path_len);
461458
zend_string *phar_find_in_include_path(zend_string *file, phar_archive_data **pphar);
462459
char *phar_fix_filepath(char *path, size_t *new_len, int use_cwd);
463460
phar_entry_info * phar_open_jit(phar_archive_data *phar, phar_entry_info *entry, char **error);
464-
void phar_parse_metadata_lazy(const char *buffer, phar_metadata_tracker *tracker, uint32_t zip_metadata_len, int persistent);
465-
bool phar_metadata_tracker_has_data(const phar_metadata_tracker* tracker, int persistent);
461+
void phar_parse_metadata_lazy(const char *buffer, phar_metadata_tracker *tracker, uint32_t zip_metadata_len, bool persistent);
462+
bool phar_metadata_tracker_has_data(const phar_metadata_tracker* tracker, bool persistent);
466463
/* If this has data, free it and set all values to undefined. */
467-
void phar_metadata_tracker_free(phar_metadata_tracker* val, int persistent);
468-
void phar_metadata_tracker_copy(phar_metadata_tracker* dest, const phar_metadata_tracker *source, int persistent);
464+
void phar_metadata_tracker_free(phar_metadata_tracker* val, bool persistent);
465+
void phar_metadata_tracker_copy(phar_metadata_tracker* dest, const phar_metadata_tracker *source, bool persistent);
469466
void phar_metadata_tracker_clone(phar_metadata_tracker* tracker);
470-
void phar_metadata_tracker_try_ensure_has_serialized_data(phar_metadata_tracker* tracker, int persistent);
471-
int phar_metadata_tracker_unserialize_or_copy(phar_metadata_tracker* tracker, zval *value, int persistent, HashTable *unserialize_options, const char* method_name);
467+
void phar_metadata_tracker_try_ensure_has_serialized_data(phar_metadata_tracker* tracker, bool persistent);
468+
zend_result phar_metadata_tracker_unserialize_or_copy(phar_metadata_tracker* tracker, zval *value, bool persistent, HashTable *unserialize_options, const char* method_name);
472469
void destroy_phar_manifest_entry(zval *zv);
473470
int phar_seek_efp(phar_entry_info *entry, zend_off_t offset, int whence, zend_off_t position, int follow_links);
474471
php_stream *phar_get_efp(phar_entry_info *entry, int follow_links);
475-
int phar_copy_entry_fp(phar_entry_info *source, phar_entry_info *dest, char **error);
476-
int phar_open_entry_fp(phar_entry_info *entry, char **error, int follow_links);
472+
zend_result phar_copy_entry_fp(phar_entry_info *source, phar_entry_info *dest, char **error);
473+
zend_result phar_open_entry_fp(phar_entry_info *entry, char **error, int follow_links);
477474
phar_entry_info *phar_get_link_source(phar_entry_info *entry);
478-
int phar_create_writeable_entry(phar_archive_data *phar, phar_entry_info *entry, char **error);
479-
int phar_separate_entry_fp(phar_entry_info *entry, char **error);
480-
int phar_open_archive_fp(phar_archive_data *phar);
481-
int phar_copy_on_write(phar_archive_data **pphar);
475+
zend_result phar_open_archive_fp(phar_archive_data *phar);
476+
zend_result phar_copy_on_write(phar_archive_data **pphar);
482477

483478
/* tar functions in tar.c */
484479
bool phar_is_tar(char *buf, char *fname);
@@ -492,23 +487,22 @@ int phar_open_or_create_zip(char *fname, size_t fname_len, char *alias, size_t a
492487
int phar_zip_flush(phar_archive_data *archive, char *user_stub, zend_long len, int defaultstub, char **error);
493488

494489
#ifdef PHAR_MAIN
495-
static int phar_open_from_fp(php_stream* fp, char *fname, size_t fname_len, char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, int is_data, char **error);
496490
extern const php_stream_wrapper php_stream_phar_wrapper;
497491
#else
498492
extern HashTable cached_phars;
499493
extern HashTable cached_alias;
500494
#endif
501495

502-
int phar_archive_delref(phar_archive_data *phar);
496+
bool phar_archive_delref(phar_archive_data *phar);
503497
void phar_entry_delref(phar_entry_data *idata);
504498

505499
phar_entry_info *phar_get_entry_info(phar_archive_data *phar, char *path, size_t path_len, char **error, int security);
506500
phar_entry_info *phar_get_entry_info_dir(phar_archive_data *phar, char *path, size_t path_len, char dir, char **error, int security);
507501
phar_entry_data *phar_get_or_create_entry_data(char *fname, size_t fname_len, char *path, size_t path_len, const char *mode, char allow_dir, char **error, int security);
508-
int phar_get_entry_data(phar_entry_data **ret, char *fname, size_t fname_len, char *path, size_t path_len, const char *mode, char allow_dir, char **error, int security);
502+
zend_result phar_get_entry_data(phar_entry_data **ret, char *fname, size_t fname_len, char *path, size_t path_len, const char *mode, char allow_dir, char **error, int security);
509503
int phar_flush(phar_archive_data *archive, char *user_stub, zend_long len, int convert, char **error);
510-
int phar_detect_phar_fname_ext(const char *filename, size_t filename_len, const char **ext_str, size_t *ext_len, int executable, int for_create, int is_complete);
511-
int phar_split_fname(const char *filename, size_t filename_len, char **arch, size_t *arch_len, char **entry, size_t *entry_len, int executable, int for_create);
504+
zend_result phar_detect_phar_fname_ext(const char *filename, size_t filename_len, const char **ext_str, size_t *ext_len, int executable, int for_create, int is_complete);
505+
zend_result phar_split_fname(const char *filename, size_t filename_len, char **arch, size_t *arch_len, char **entry, size_t *entry_len, int executable, int for_create);
512506

513507
typedef enum {
514508
pcr_use_query,

0 commit comments

Comments
 (0)