go to bug id or search bugs for
After upgrading from 5.2.1 to 5.2.3, my app broke. Why? Because I had the audacity to use substr_replace() in a perfectly reasonable way.
This isn't rocket science. If $length is longer than the length of $string, substr_replace() should return the same as if $length was not given. It should not return FALSE. Hell, it doesn't even return FALSE if you specify the string 'blow me' as $length. Fuck the what?
And don't even think about giving me the standard bullshit "please double-check the documentation" non-answer that bug report #41395 got on this same issue. I triple-checked the documentation, and nowhere did it say, "Oh, and now it sometimes returns FALSE for no fucking reason. Sit and spin -- we'll break compatibility in sub-point releases whenever we goddamn want."
var_dump(substr_replace('12345', 'abc', 3));
var_dump(substr_replace('12345', 'abc', 3, 3));
var_dump(substr_replace('12345', 'abc', 3, 4));
var_dump(substr_replace('12345', 'abc', 3, 5));
var_dump(substr_replace('12345', 'abc', 3, 6));
bool(false) <-- This shit is broke!
Add a Patch
Add a Pull Request
This "BC break" was caused by a fix for bug #40754 that caused crashes in when passed invalid length. Replacing after position that exceeds the length of the input string is not how it should work, is it?
Perhaps it should emit a warning about this instead of just return FALSE without telling why it happened..or perhaps it should just silently default to the length of the input string in that case?
I'm assigning this to Ilia who committed this patch to let him decide how it should be dealt with. I'd just add a big fat E_FATAL error for passing bogus values to the function.. :)
Hint: Next time (hopefully you never have to :) try tone down your tune a bit before clicking the "Submit" button. Insulting the volunteers who develop PHP and occasionally even fix bugs in it is not very constructive and will only cause us to just ignore your report altogether.
I think that how it used to work (minus the memory overflow part) was correct. Despite what either of us think is right, though, 5.2.2 is not the time to be needlessly breaking userland code. Especially not mine. (smiley face)
Thanks, Jani. This bug report may not have read that way, but it was honestly written with love, not hatred, for all PHP contributors. I will be much less of a douche in future correspondence.
This bug has been fixed in CVS.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
Thank you for the report, and for helping us make PHP better.