]> granicus.if.org Git - php/commitdiff
- Add Phar::delMetadata()
authorMarcus Boerger <helly@php.net>
Tue, 15 May 2007 20:21:19 +0000 (20:21 +0000)
committerMarcus Boerger <helly@php.net>
Tue, 15 May 2007 20:21:19 +0000 (20:21 +0000)
- Add Phar::hasMetadata()
- Add Phar::isValidPharFilename()

ext/phar/phar.c

index 7c9fa4743580e2d49c1699a8e3e5b48347558c76..a317950a4a88da26fcbe4c6ebb479f13966de5fb 100644 (file)
@@ -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]) {