]> granicus.if.org Git - php/commitdiff
Missing files in previous commit (Check the relevant path for open_basedir
authorArnaud Le Blanc <lbarnaud@php.net>
Mon, 11 Aug 2008 15:32:52 +0000 (15:32 +0000)
committerArnaud Le Blanc <lbarnaud@php.net>
Mon, 11 Aug 2008 15:32:52 +0000 (15:32 +0000)
in symlink())

main/fopen_wrappers.c
main/fopen_wrappers.h

index 9a26f3929605ccdb2eb7330543a7b320ef151f7f..18c57b126258d627c215f483177aa46dbc7dd41b 100644 (file)
@@ -694,6 +694,14 @@ PHPAPI char *php_strip_url_passwd(char *url)
 /* {{{ expand_filepath
  */
 PHPAPI char *expand_filepath(const char *filepath, char *real_path TSRMLS_DC)
+{
+       return expand_filepath_ex(filepath, real_path, NULL, 0 TSRMLS_CC);
+}
+/* }}} */
+
+/* {{{ expand_filepath_ex
+ */
+PHPAPI char *expand_filepath_ex(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len TSRMLS_DC)
 {
        cwd_state new_state;
        char cwd[MAXPATHLEN];
@@ -705,7 +713,16 @@ PHPAPI char *expand_filepath(const char *filepath, char *real_path TSRMLS_DC)
                cwd[0] = '\0';
        } else {
                const char *iam = SG(request_info).path_translated;
-               char *result = VCWD_GETCWD(cwd, MAXPATHLEN);
+               const char *result;
+               if (relative_to) {
+                       if (relative_to_len > MAXPATHLEN-1U) {
+                               return NULL;
+                       }
+                       result = relative_to;
+                       memcpy(cwd, relative_to, relative_to_len+1U);
+               } else {
+                       result = VCWD_GETCWD(cwd, MAXPATHLEN);
+               }
 
                if (!result && (iam != filepath)) {
                        int fdtest = -1;
index 7c2f33fd1ca4a67733c1d12b5c6a1fac3d365e1e..1f3c4ed1d5368046dc55d381175e61beafe8c155 100644 (file)
@@ -27,6 +27,7 @@ BEGIN_EXTERN_C()
 
 PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle TSRMLS_DC);
 PHPAPI char *expand_filepath(const char *filepath, char *real_path TSRMLS_DC);
+PHPAPI char *expand_filepath_ex(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len TSRMLS_DC);
 
 PHPAPI int php_check_open_basedir(const char *path TSRMLS_DC);
 PHPAPI int php_check_open_basedir_ex(const char *path, int warn TSRMLS_DC);