Bug #15130 Updated: pathinfo reports extension as bar/baz for /foo/bar.bar/baz

From: Date: Mon, 21 Jan 2002 08:03:26 +0000
Subject: Bug #15130 Updated: pathinfo reports extension as bar/baz for /foo/bar.bar/baz
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-77644@lists.php.net to get a copy of this message
ID: 15130 Updated by: torben Reported By: phpnet@cuntbubble.com 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] phpnet@cuntbubble.com 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] irc-html@php.net 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] phpnet@cuntbubble.com 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

« previous php.dev (#77644) next »