On 30/08/13 10:43, Julien Pauli wrote:
On Fri, Aug 30, 2013 at 2:30 AM, Terry Ellison <ellison.te...@gmail.com <mailto:ellison.te...@gmail.com>> wrote:


    There's another one in string.c, in PHP_FUNCTION(pathinfo), that
    could be applied as well, though there's little performance gain
    in avoiding the copy of a 4 element string array.

    BTW, looking at this pathinfo code, it doesn't do what the
    documentation says it does -- or at least this states that the
    optional argument if present should be _one_ of PATHINFO_DIRNAME,
    PATHINFO_BASENAME, PATHINFO_EXTENSION or PATHINFO_FILENAME.
    However, if a bitmask is supplied then this function returns the
    element corresponding to the lowest bit value rather than an error
    return, for example:

    $ php -r 'echo pathinfo("/tmp/x.fred",
    PATHINFO_FILENAME|PATHINFO_EXTENSION),"\n";'
    fred

    This is a bizarre behaviour.   At a minimum the documentation
    should actually state what the function does. Or do we bother to
    raise a patch to fix this sort of thing, given that returning an
    empty string (or more consistently with other functions, NULL) in
    this case could create a BC break with existing buggy code?


This is weird, yes.
It's not the lowest bit value that is returned, but the first element put in the array (as zend_hash_get_current_data() is used with no HashPosition) , which is even more confusing.

How to explain that in the documentation ? :|

Yes I understand that, but the code processes the elements in this dirname, basename, filename, extension order so the two statements are equivalent in implementation.

I am an experienced developer but a newbie-ish to the PHP developer community, and I come back to my Q. What do we typically do if we come across such weird functional behaviour outside the documented use of a standard function?

* Shrug our shoulders and say "That's PHP for you.  BC rules"
* Fix the documentation to say what the code actually does
* Fix the code at the next major release, say 5.6 to have sensible error behaviour.

Just interested in understanding the consensus policy here. Do I post a fix to the doc; post a fix to the code; or move on to other issues?

Regards Terry

Reply via email to