Bug #72625 [Fbk->Asn]: realpath() fails on very long argument.

From: 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

« previous php.bugs (#202473) next »