From: Marcus Boerger Date: Tue, 15 May 2007 20:21:19 +0000 (+0000) Subject: - Add Phar::delMetadata() X-Git-Tag: RELEASE_1_2_0~35 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=004932e11da544927428e0b739ec8879f1c5d97a;p=php - Add Phar::delMetadata() - Add Phar::hasMetadata() - Add Phar::isValidPharFilename() --- diff --git a/ext/phar/phar.c b/ext/phar/phar.c index 7c9fa47435..a317950a4a 100644 --- a/ext/phar/phar.c +++ b/ext/phar/phar.c @@ -1338,19 +1338,57 @@ static int phar_open_fp(php_stream* fp, char *fname, int fname_len, char *alias, } /* }}} */ +int phar_detect_phar_fname_ext(const char *filename, int check_length, char **ext_str, int *ext_len) /* {{{ */ +{ + char end; + char *pos_p = strstr(filename, ".phar.php"); + char *pos_z = strstr(filename, ".phar.gz"); + char *pos_b = strstr(filename, ".phar.bz2"); + + if (pos_p) { + if (pos_z) { + return FAILURE; + } + *ext_str = pos_p; + *ext_len = 9; + } else if (pos_z) { + *ext_str = pos_z; + *ext_len = 8; + } else if (pos_b) { + *ext_str = pos_b; + *ext_len = 9; + } else if ((pos_p = strstr(filename, ".phar")) != NULL) { + *ext_str = pos_p; + *ext_len = 5; + } else { + return FAILURE; + } + if (check_length && (*ext_str)[*ext_len] != '\0') { + return FAILURE; + } + end = (*ext_str)[*ext_len]; + if (end != '\0' && end != '/' && end != '\\') { + return FAILURE; + } + return SUCCESS; +} +/* }}} */ + /** * Process a phar stream name, ensuring we can handle any of: * - * - phar://whatever.phar * - whatever.phar * - whatever.phar.gz * - whatever.phar.bz2 + * - whatever.phar.php + * + * Optionally the name might start with 'phar://' * * This is used by phar_open_url() */ int phar_split_fname(char *filename, int filename_len, char **arch, int *arch_len, char **entry, int *entry_len TSRMLS_DC) /* {{{ */ { - char *pos_p, *pos_z, *pos_b, *ext_str; + char *ext_str; int ext_len; if (!strncasecmp(filename, "phar://", 7)) { @@ -1358,27 +1396,10 @@ int phar_split_fname(char *filename, int filename_len, char **arch, int *arch_le filename_len -= 7; } - pos_p = strstr(filename, ".phar.php"); - pos_z = strstr(filename, ".phar.gz"); - pos_b = strstr(filename, ".phar.bz2"); - if (pos_p) { - if (pos_z) { - return FAILURE; - } - ext_str = pos_p; - ext_len = 9; - } else if (pos_z) { - ext_str = pos_z; - ext_len = 8; - } else if (pos_b) { - ext_str = pos_b; - ext_len = 9; - } else if ((pos_p = strstr(filename, ".phar")) != NULL) { - ext_str = pos_p; - ext_len = 5; - } else { + if (phar_detect_phar_fname_ext(filename, 0, &ext_str, &ext_len) == FAILURE) { return FAILURE; } + *arch_len = ext_str - filename + ext_len; *arch = estrndup(filename, *arch_len); if (ext_str[ext_len]) {