ID: 15130
Updated by: torben
Reported By: [EMAIL PROTECTED]
Old Status: Bogus
Status: Open
Bug Type: Filesystem function related
Operating System: FreeBSD
PHP Version: 4.1.1
New Comment:
Reopening. It does appear that pathinfo() reacts badly if:
a) the filename portion does not have an extension, AND
b) one of the directories has a dot in its name.
This is because if the above conditions are met, the
extension bit in string.c looks for the last occurrence of
'.' in the pathname and takes anything after it as the
file's extension. The following patch fixes the problem, if someone
with enough karma would like to check it out and
check it in (yuk yuk).
Torben
Index: string.c
===================================================================
RCS file: /repository/php4/ext/standard/string.c,v
retrieving revision 1.261
diff -u -r1.261 string.c
--- string.c 5 Jan 2002 23:49:57 -0000 1.261
+++ string.c 21 Jan 2002 07:48:41 -0000
@@ -1201,11 +1201,18 @@
}
if (argc < 2 || opt == PHP_PATHINFO_EXTENSION) {
- char *p;
+ char *p, *last_separator;
int idx;
p = strrchr(Z_STRVAL_PP(path), '.');
- if (p) {
+
+#ifdef PHP_WIN32
+ last_separator = strrchr(Z_STRVAL_PP(path), '\\');
+#else
+ last_separator = strrchr(Z_STRVAL_PP(path), '/');
+#endif
+
+ if (p && p > last_separator) {
idx = p - Z_STRVAL_PP(path);
add_assoc_stringl(tmp, "extension", Z_STRVAL_PP(path) + idx +
1,
len - idx - 1, 1);
}
Previous Comments:
------------------------------------------------------------------------
[2002-01-20 22:29:14] [EMAIL PROTECTED]
how can you possibly suggest that bar/baz
is the file extension of "/foo/bar.bar/baz"
by that logic recombining the parts gets you
/foo/bar.bar/baz.bar/baz
as the filename!
I've added a comment with a php replacement and some examples of the
broken output at
http://www.php.net/manual/en/function.pathinfo.php
------------------------------------------------------------------------
[2002-01-20 22:19:41] [EMAIL PROTECTED]
That's the correct output of pathinfo (and print_r).
See http://www.php.net/manual/en/function.pathinfo.php
Status -> Bogus
------------------------------------------------------------------------
[2002-01-20 20:27:56] [EMAIL PROTECTED]
Hi,
print_r(pathinfo("/foo/bar.bar/baz"));
Array (
[dirname] => /foo/bar.bar
[basename] => baz
[extension] => bar/baz
)
------------------------------------------------------------------------
Edit this bug report at http://bugs.php.net/?id=15130&edit=1
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]