Edit report at http://bugs.php.net/bug.php?id=53251&edit=1

 ID:                 53251
 Updated by:         paj...@php.net
 Reported by:        jeanseb at au-fil-du dot net
 Summary:            bindtextdomain with null directory doesn't return
                     the previously set
 Status:             Feedback
 Type:               Bug
 Package:            Gettext related
 Operating System:   Debian 5.0.6
 PHP Version:        5.3.3
 Block user comment: N
 Private report:     N

 New Comment:

If you read the code you will see that dir_len == 0  happens when you
pass NULL or "" to the function.



We don't do any detection or whatever else in there. This is a pure
binding, there is no logic in the PHP extension and we only rely on the
underlying library to do the right thing with what the users provide.
The only thing that we did not do was not to pass NULL when the user
actually gives us NULL (or empty string, can be improved later to
actually detect both separately).



Now, reading the bindtextdomain API reference:



"Note: Applications that wish to use chdir() should always use absolute
pathnames to avoid misadvertently selecting the wrong or non-existant
directory."



That pretty much confirms what I've been saying earlier.



http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/baselib-bindtextdomain.html


Previous Comments:
------------------------------------------------------------------------
[2010-11-24 23:51:25] greno at verizon dot net

I looked at the patch earlier.



It does not do what is necessary.



When the user calls bindtextdomain(domain, NULL) it needs to do one of
two things.  If there was no previous bindtextdomain call made then it
should return the default locale directory for the system.  Otherwise if
bindtextdomain was called previously then it should return that setting.
 



There are about 3-4 places above where I've outlined the correct
behavior in detail.  Can you please tailor the behavior to match those? 
Thanks.



And who cares about dir length = 0?  What does that have to do with
returning the correct setting?  You do not even need to be looking at
any directory length.  If you see a NULL there you go, that's the key
that tells you to return existing setting.





.

------------------------------------------------------------------------
[2010-11-24 23:44:30] paj...@php.net

It is TS on windows now (our builds). But the key part is in my question
in the 2nd comment. Questions like to be answered from time to time you
know :)

------------------------------------------------------------------------
[2010-11-24 23:43:15] greno at verizon dot net

Gettext is not thread-safe.



You cannot run PHP gettext in anything but a non-threaded CGI or prefork
mode.



We run our webservers prefork to support PHP gettext.  



And for any production webserver it is best to run either CGI or prefork
so that your connections are completely isolated.



And PHP gettext performs correctly when used w/CGI or preforking
webservers.





.

------------------------------------------------------------------------
[2010-11-24 23:39:00] paj...@php.net

Besides our little difference about virtual CWD, please try the attached
patch against 5.3. It checks if the given directory is empty or NULL
(dir length == 0) and if yes, calls bindtextdomain with NULL.



Is it what you expect?

------------------------------------------------------------------------
[2010-11-24 23:38:42] paj...@php.net

The following patch has been added/updated:

Patch Name: Test_if_NULL_or_empty
Revision:   1290638321
URL:       
http://bugs.php.net/patch-display.php?bug=53251&patch=Test_if_NULL_or_empty&revision=1290638321

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    http://bugs.php.net/bug.php?id=53251


-- 
Edit this bug report at http://bugs.php.net/bug.php?id=53251&edit=1

Reply via email to