Welcome Guest, Not a member yet? Register   Sign In
small bug in _reindex_segments (Router.php)
#1

[eluser]El Oscuro[/eluser]
Hello ~

I believe I discovered a small (but for me it was very tough to find) bug in CI.

If we want to reroute something like http://myserver.com/blog/1 to http://myserver/blog/threads/1, it works fine.

But if the rerouted URI only differs from the original one in the order of segments (example: http://myserver.com/blog/users/1 => http://myserver.com/users/blog/1), _reindex_segments function mistakenly assumes them identical and as a result, there's no rerouting at all.

Here is the problem (Router.php, line 256):
Code:
// Is the routed segment array different then the main segment array?
$diff = (count(array_diff($this->rsegments, $this->segments)) == 0) ? FALSE : TRUE;
And then...
Code:
if ($diff == FALSE)
{
    $this->rsegments = $this->segments;
}
Here is a quote from PHP's documentation:
Quote:array_diff() returns an array containing all the values of array1 that are not present in any of the other arguments.
This is not exactly what we want...
The problem is that array_diff doesn't care about order (in other words, keys) of segments in arrays.

I propose to use array_diff_assoc function here. I haven't tested it thoroughly but for now it works fine.

Hope this will be useful for someone! :coolsmile:
#2

[eluser]pjturpeau[/eluser]
Is there a chance to get this bug fixed in the next CI release (1.5.5) ? It has also annoyed me for a while...

thanks a lot.




Theme © iAndrew 2016 - Forum software by © MyBB