]> granicus.if.org Git - php/commitdiff
Better fix for bug #41655
authorDmitry Stogov <dmitry@php.net>
Mon, 25 Jun 2007 08:40:20 +0000 (08:40 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 25 Jun 2007 08:40:20 +0000 (08:40 +0000)
ext/standard/dir.c
ext/standard/tests/file/bug41655_1.phpt

index 4d119bfddb08b35c48627c049668956f0ede58ec..c6f73488674e9d7b4acd19013f4b13d6806cf55f 100644 (file)
@@ -397,19 +397,19 @@ PHP_FUNCTION(glob)
 #endif
 
        if (PG(safe_mode) || (PG(open_basedir) && *PG(open_basedir))) {
-               size_t base_len = php_dirname(pattern, strlen(pattern));
-               char pos = pattern[base_len];
-
-               pattern[base_len] = '\0';
-
-               if (PG(safe_mode) && (!php_checkuid(pattern, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
+               int pattern_len = strlen(pattern);
+               char *basename = estrndup(pattern, pattern_len);
+               
+               php_dirname(basename, pattern_len);
+               if (PG(safe_mode) && (!php_checkuid(basename, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
+                       efree(basename);
                        RETURN_FALSE;
                }
-               if (php_check_open_basedir(pattern TSRMLS_CC)) {
+               if (php_check_open_basedir(basename TSRMLS_CC)) {
+                       efree(basename);
                        RETURN_FALSE;
                }
-
-               pattern[base_len] = pos;
+               efree(basename);
        }
 
        globbuf.gl_offs = 0;
index 9b047bcace5081096c8ba5ad1c4218e9d20eddf7..9338ebd817d0b9137c1359fa39aefb80bca3d2ae 100644 (file)
@@ -7,4 +7,4 @@ open_basedir=/tmp
        $a=glob("./*.jpeg");
 ?>
 --EXPECTF--
-Warning: glob() [%s]: open_basedir restriction in effect. File(.) is not within the allowed path(s): (/tmp) in %s on line %d
+Warning: glob(): open_basedir restriction in effect. File(.) is not within the allowed path(s): (/tmp) in %s on line %d