[PHP-DEV] Bug #15130 Updated: pathinfo reports extension as bar/baz for /foo/bar.bar/baz

2002-01-22 Thread elixer

ID: 15130
Updated by: elixer
Reported By: [EMAIL PROTECTED]
Old Status: Open
Status: Closed
Bug Type: Filesystem function related
Operating System: FreeBSD
PHP Version: 4.1.1
New Comment:

Fixed.  Took Torben's patch one step further and only look at the
basename for the file extension.

This still doesn't solve all the issues that you
([EMAIL PROTECTED], nice email address by the way, I feel like I
need to go to church just reading it :)) have with pathinfo() as you
mention in your documentation note.  But it fixes this particular
problem.

Closed.


Previous Comments:


[2002-01-21 03:03:26] [EMAIL PROTECTED]

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.c5 Jan 2002 23:49:57 -   1.261
+++ string.c21 Jan 2002 07:48:41 -
@@ -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);
}





[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=15130edit=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]




[PHP-DEV] Bug #15130 Updated: pathinfo reports extension as bar/baz for /foo/bar.bar/baz

2002-01-21 Thread torben

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.c5 Jan 2002 23:49:57 -   1.261
+++ string.c21 Jan 2002 07:48:41 -
@@ -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=15130edit=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]




[PHP-DEV] Bug #15130 Updated: pathinfo reports extension as bar/baz for /foo/bar.bar/baz

2002-01-20 Thread irc-html

ID: 15130
Updated by: irc-html
Reported By: [EMAIL PROTECTED]
Old Status: Open
Status: Bogus
Bug Type: Filesystem function related
Operating System: FreeBSD
PHP Version: 4.1.1
New Comment:

That's the correct output of pathinfo (and print_r).

See http://www.php.net/manual/en/function.pathinfo.php

Status - Bogus


Previous Comments:


[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=15130edit=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]




[PHP-DEV] Bug #15130 Updated: pathinfo reports extension as bar/baz for /foo/bar.bar/baz

2002-01-20 Thread phpnet

ID: 15130
User updated by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
Status: Bogus
Bug Type: Filesystem function related
Operating System: FreeBSD
PHP Version: 4.1.1
New Comment:

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










Previous Comments:


[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=15130edit=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]