Bug #72625 [Fbk->Asn]: realpath() fails on very long argument.
| From: | anrdaemon at freemail dot ru | Date: | Thu, 21 Jul 2016 12:07:05 +0000 |
| Subject: | Bug #72625 [Fbk->Asn]: realpath() fails on very long argument. | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-202473@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=72625&edit=1
ID: 72625
User updated by: anrdaemon at freemail dot ru
Reported by: anrdaemon at freemail dot ru
Summary: realpath() fails on very long argument.
-Status: Feedback
+Status: Assigned
Type: Bug
Package: Filesystem function related
Operating System: Windows
PHP Version: 7.0.8
Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Didn't change. If not made worse.
Refined script:
<?php
$fn =
"{$_SERVER['TEMP']}/_test/documents/projects/myproject/vendor/name/library/classpath";
$fn1 =
"$fn/../../../../../../../../_test/documents/projects/myproject/vendor/name/library/../../../../../../../_test/documents/projects/myproject/vendor/name/library/classpath";
mkdir($fn, 0777, true);
error_log(sprintf("(%u)%s", strlen($fn), $fn));
error_log("=>" . realpath($fn));
error_log(sprintf("(%u)%s", strlen($fn1), $fn1));
error_log("=>" . realpath($fn1));
error_log(sprintf("(%u)%s", strlen(dirname($fn1)), dirname($fn1)));
error_log("=>" . realpath(dirname($fn1)));
PHP 5.6.23/64
(101)C:\Users\ANRDAE~1\AppData\Local\Temp/_test/documents/projects/myproject/vendor/name/library/classpath
=>C:\Users\anrdaemon\AppData\Local\Temp\_test\documents\projects\myproject\vendor\name\library\classpath
(266)C:\Users\ANRDAE~1\AppData\Local\Temp/_test/documents/projects/myproject/vendor/name/library/classpath/../../../../../../../../_test/documents/projects/myproject/vendor/name/library/../../../../../../../_test/documents/projects/myproject/vendor/name/library/classpath
=>
(256)C:\Users\ANRDAE~1\AppData\Local\Temp/_test/documents/projects/myproject/vendor/name/library/classpath/../../../../../../../../_test/documents/projects/myproject/vendor/name/library/../../../../../../../_test/documents/projects/myproject/vendor/name/library
=>C:\Users\anrdaemon\AppData\Local\Temp\_test\documents\projects\myproject\vendor\name\library
PHP 7.0.8/64
(101)C:\Users\ANRDAE~1\AppData\Local\Temp/_test/documents/projects/myproject/vendor/name/library/classpath
=>C:\Users\anrdaemon\AppData\Local\Temp\_test\documents\projects\myproject\vendor\name\library\classpath
(266)C:\Users\ANRDAE~1\AppData\Local\Temp/_test/documents/projects/myproject/vendor/name/library/classpath/../../../../../../../../_test/documents/projects/myproject/vendor/name/library/../../../../../../../_test/documents/projects/myproject/vendor/name/library/classpath
=>
(256)C:\Users\ANRDAE~1\AppData\Local\Temp/_test/documents/projects/myproject/vendor/name/library/classpath/../../../../../../../../_test/documents/projects/myproject/vendor/name/library/../../../../../../../_test/documents/projects/myproject/vendor/name/library
=>C:\Users\anrdaemon\AppData\Local\Temp\_test\documents\projects\myproject\vendor\name\library
PHP 7.1.0b1/64
(101)C:\Users\ANRDAE~1\AppData\Local\Temp/_test/documents/projects/myproject/vendor/name/library/classpath
=>C:\Users\anrdaemon\AppData\Local\Temp\_test\documents\projects\myproject\vendor\name\library\classpath
(266)C:\Users\ANRDAE~1\AppData\Local\Temp/_test/documents/projects/myproject/vendor/name/library/classpath/../../../../../../../../_test/documents/projects/myproject/vendor/name/library/../../../../../../../_test/documents/projects/myproject/vendor/name/library/classpath
=>
(260)\\?\C:\Users\ANRDAE~1\AppData\Local\Temp/_test/documents/projects/myproject/vendor/name/library/classpath/../../../../../../../../_test/documents/projects/myproject/vendor/name/library/../../../../../../../_test/documents/projects/myproject/vendor/name/library
=>
Previous Comments:
------------------------------------------------------------------------
[2016-07-20 10:05:00] cmb@php.net
That is supposed to be fixed as of PHP 7.1.0alpha2. Please try
with a version from <http://windows.php.net/qa/>.
------------------------------------------------------------------------
[2016-07-20 03:53:13] anrdaemon at freemail dot ru
Description:
------------
When given a long string (> 260 characters), realpath() and SplFileInfo::getRealPath() both fail
to convert path to something sensible and return empty result.
However, using dirname() to shorten the input string will result in the function working again.
Additionally, PHP reporting "invalid path", if you try to use extended access syntax
('\\?\<path>').
(Oh, and before you say something silly, the sting in example is an equivalent of a real path
generated by Composer.)
Test script:
---------------
<?php
$fn =
"{$_SERVER['TEMP']}/_test/documents/projects/myproject/vendor/name/library/classpath";
$fn1 =
"$fn/../../../../../../../../_test/documents/projects/myproject/vendor/name/library/../../../../../../../_test/documents/projects/myproject/vendor/name/library/classpath";
mkdir($fn, 0777, true);
error_log(strlen($fn));
error_log(realpath($fn));
error_log(strlen($fn1));
error_log($fn1);
error_log(realpath($fn1));
error_log(strlen(dirname($fn1)));
error_log(dirname($fn1));
error_log(realpath(dirname($fn1)));
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=72625&edit=1