summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2014-01-03 22:25:58 +0100
committerAnatol Belski <ab@php.net>2014-01-03 22:25:58 +0100
commit46f60fae22b420320f3616e00928d70706cf4f4c (patch)
tree8202e00dc28dee6500a621cc2bdc1d3e16e85285
parentc0d060f5c02db168f1de895b41afffbc6e3cacfb (diff)
downloadphp-git-46f60fae22b420320f3616e00928d70706cf4f4c.tar.gz
Fixed bug #66395 basename function doesn't remove drive letter
-rw-r--r--NEWS1
-rw-r--r--ext/standard/string.c2
-rw-r--r--ext/standard/tests/file/basename_bug66395-win32.phpt18
3 files changed, 20 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index d842e12606..b87803d5bf 100644
--- a/NEWS
+++ b/NEWS
@@ -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)
diff --git a/ext/standard/string.c b/ext/standard/string.c
index b3860ade5d..bf2df9a612 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -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
diff --git a/ext/standard/tests/file/basename_bug66395-win32.phpt b/ext/standard/tests/file/basename_bug66395-win32.phpt
new file mode 100644
index 0000000000..a9580dc09e
--- /dev/null
+++ b/ext/standard/tests/file/basename_bug66395-win32.phpt
@@ -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==