Fixed bug #66395 basename function doesn't remove drive letter

This commit is contained in:
Anatol Belski 2014-01-03 22:25:58 +01:00
parent c0d060f5c0
commit 46f60fae22
3 changed files with 20 additions and 1 deletions

1
NEWS
View File

@ -103,6 +103,7 @@ PHP NEWS
- Standard:
. Fixed bug #64760 (var_export() does not use full precision for floating-point
numbers) (Yasuo)
. Fixed bug #66395 (basename function doesn't remove drive letter). (Anatol)
- XMLReader:
. Fixed bug #51936 (Crash with clone XMLReader). (Mike)

View File

@ -1433,7 +1433,7 @@ PHPAPI void php_basename(const char *s, size_t len, char *suffix, size_t sufflen
goto quit_loop;
case 1:
#if defined(PHP_WIN32) || defined(NETWARE)
if (*c == '/' || *c == '\\') {
if (*c == '/' || *c == '\\' || (*c == ':' && (c - s == 1))) {
#else
if (*c == '/') {
#endif

View File

@ -0,0 +1,18 @@
--TEST--
basename bug #66395
--SKIPIF--
<?php if (substr(PHP_OS, 0, 3) != 'WIN') { die('skip Windows only basename tests'); } ?>
--FILE--
<?php
echo basename("c:file.txt") . "\n";
echo basename("d:subdir\\file.txt") . "\n";
echo basename("y:file.txt", ".txt") . "\n";
echo basename("notdriveletter:file.txt") . "\n";
?>
==DONE==
--EXPECTF--
file.txt
file.txt
file
notdriveletter:file.txt
==DONE==