Bug #49625 [Com]: spl_autoload and case sensitivity

From: Date: Fri, 15 Jun 2012 19:59:25 +0000
Subject: Bug #49625 [Com]: spl_autoload and case sensitivity
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-171296@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=49625&edit=1

 ID:                 49625
 Comment by:         jdornan at stanford dot edu
 Reported by:        jo at feuersee dot de
 Summary:            spl_autoload and case sensitivity
 Status:             Not a bug
 Type:               Bug
 Package:            SPL related
 Operating System:   Linux
 PHP Version:        5.3.0
 Block user comment: N
 Private report:     N

 New Comment:

This seems like a 20 min fix to me, and I've never looked the sql_autoload code 
before. I spent a good deal of time spinning my wheels on this. I don't see why 
anyone should lose time of this very obvious bug. However it's better to patch 
that to bitch, as I always say. I'll submit my patch and see what happens. It's 
not big deal if this is not fixed, since it's so easy to fix I can keep fixing 
it with each release.

Here is a diff, I'll submit the patch with the "Add a Patch" link.


225d224
<       char *lc_class_file;
227d225
<       int lc_class_file_len;
229d226
<       int mixed_case = 0;
235,236c232
<       lc_class_file_len = spprintf(&lc_class_file, 0, "%s%s", lc_name, 
file_extension);
<       class_file_len = spprintf(&class_file, 0, "%s%s", class_name, 
file_extension);
---
>       class_file_len = spprintf(&class_file, 0, "%s%s", lc_name, 
file_extension);
252,261c248
<               mixed_case = 1;
<       }
< 
<         /* fall back to lowercase file name. should issue deprecated warning. 
*/
<         if (ret != SUCCESS) {
<               ret = php_stream_open_for_zend_ex(lc_class_file, &file_handle, 
ENFORCE_SAFE_MODE|USE_PATH|STREAM_OPEN_FOR_INCLUDE TSRMLS_CC);
<         }
< 
<       if (ret == SUCCESS) {
<               if (!file_handle.opened_path && mixed_case == 1) {
---
>               if (!file_handle.opened_path) {
263,264d249
<               } else if(!file_handle.opened_path && mixed_case == 0) {
<                       file_handle.opened_path = estrndup(lc_class_file, 
lc_class_file_len);
290d274
<                       efree(lc_class_file);
295d278
<       efree(lc_class_file);
331d313
< 

PS: I really hate this bug with a passion.


Previous Comments:
------------------------------------------------------------------------
[2012-06-01 23:10:39] mrex at interport dot net

After having lost 2 days over this, I agree, this should be fixed.  At the very least, it should be
documented that spl_autoload lower cases filenames.  I spent hours trying to register an autoload
class that would fix this, but in vain.  How can I know that "dataloader" should be mapped
to "DataLoader"?

If it had been documented that filenames were lowercased, I would not have spent hours banging my
head against a brick wall...

------------------------------------------------------------------------
[2012-05-14 23:45:55] david at panmedia dot co dot nz

Please fix this

------------------------------------------------------------------------
[2011-09-05 01:32:08] blake dot soley at gmail dot com

I agree, this bug is not bogus.  In fact, it's actually quite serious.  Just because
spl_autoload was designed poorly doesn't mean it has to remain broken.  Several fixes have been
proposed, please consider implementing one of them to make this function cross-platform, and
therefore useful.

------------------------------------------------------------------------
[2011-08-10 01:13:40] bram048 at gmail dot com

I agree with Simon. There is absolutely no reason not to fix this, while keeping 
backwards compatibility.

Two years ago the reason for not fixing it was "breaking BC is not an option". 
There are plenty of alternatives, and to be honest, PHP has broken BC alot of 
times in the last few versions (which is a good thing in my opinion, as long as 
the language becomes cleaner/stricter).

Having all the files in lowercase makes them alot harder to read. Having a 
custom autoloader function is slower and more complicated to get right, and just 
makes code more ugly and harder to understand.

At the very least case sensitivity of the SPL autoloader should be configurable, 
or available by the use of an extra suffix. I would love to see this in the new 
5.4 release; shouldn't take more than a few lines of code.

------------------------------------------------------------------------
[2011-03-08 13:08:42] simon at systemparadox dot co dot uk

Why is this bug marked as bogus?
Even if spl_autoload itself isn't fixed, at the very least a version that does it correctly
could be added (although in this case it seriously could just be fixed by trying the correct case
first).

Implementing one in PHP is all very well, but that means that it's non-standard and likely
incompatible with what each programmer might expect. It's also slower.

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


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

    https://bugs.php.net/bug.php?id=49625


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


Thread (23 messages)

« previous php.bugs (#171296) next »