]> granicus.if.org Git - php/commitdiff
- Prevent rename on extracted archieves
authorMarcus Boerger <helly@php.net>
Mon, 26 Mar 2007 19:51:22 +0000 (19:51 +0000)
committerMarcus Boerger <helly@php.net>
Mon, 26 Mar 2007 19:51:22 +0000 (19:51 +0000)
ext/phar/phar.c

index f37d9cce055bb220ee5e6d51fcdcb036e5f20cb1..b255d81618cf252bdbb1af94d26bac4c6001b03c 100644 (file)
@@ -3125,9 +3125,9 @@ static int phar_wrapper_unlink(php_stream_wrapper *wrapper, char *url, int optio
 static int phar_wrapper_rename(php_stream_wrapper *wrapper, char *url_from, char *url_to, int options, php_stream_context *context TSRMLS_DC) /* {{{ */
 {
        php_url *resource_from, *resource_to;
-       char *from_file, *to_file;
-       char *error;
+       char *from_file, *to_file, *error, *plain_map;
        phar_entry_data *fromdata, *todata;
+       uint host_len;
 
        if (PHAR_G(readonly)) {
                php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "phar error: write operations disabled by INI setting");
@@ -3175,7 +3175,6 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, char *url_from, char
                return 0;
        }
 
-       /*TODO: handle extract_list */
        if (strcmp(resource_from->host, resource_to->host)) {
                php_url_free(resource_from);
                php_url_free(resource_to);
@@ -3183,6 +3182,13 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, char *url_from, char
                return 0;
        }
 
+       host_len = strlen(resource_from->host);
+       if (zend_hash_find(&(PHAR_GLOBALS->phar_plain_map), resource_from->host, host_len+1, (void **)&plain_map) == SUCCESS) {
+               /*TODO:use php_stream_rename() once available*/
+               php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "phar error: cannot rename \"%s\" to \"%s\" from extracted phar archive", url_from, url_to);
+               return 0;
+       }
+
        /* need to copy to strip leading "/", will get touched again */
        from_file = estrdup(resource_from->path + 1);
        to_file = estrdup(resource_to->path + 1);