When the "access" component of the $router_item array does not exist, php 5.4 spits out a notice to that effect. This code fixes that by not trying to access (no pun intended) the index if it doesn`t exist.

#5 drupal-undefined-index-access-in-menu-inc-1847382-5.patch550 bytespingwin4eg
PASSED: [[SimpleTest]]: [MySQL] 39,569 pass(es). View
#2 1847382.diff487 bytesthehong
PASSED: [[SimpleTest]]: [MySQL] 39,570 pass(es). View
menu.inc_.patch438 bytesMisterSpeed
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch menu.inc_.patch. Unable to apply patch. See the log in the details link for more information. View
Members fund testing for the Drupal project. Drupal Association Learn more


Status: Needs review » Needs work

The last submitted patch, menu.inc_.patch, failed testing.

thehong’s picture

Version: 7.17 » 7.x-dev
Status: Needs work » Needs review
487 bytes
PASSED: [[SimpleTest]]: [MySQL] 39,570 pass(es). View
pingwin4eg’s picture

Status: Needs review » Active

First, you're doing wrong check in patches: 'access' is key of an array not a value.
Second, $router_item['access'] already should exist by that moment (at least in D7.17), it comes from _menu_check_access().

Need more info. What version of Drupal you are using?

MisterSpeed’s picture

Access may be created in _menu_access_check but not necessarily. For example line 635 will fail if for some reason the custom access function has a typo in it. This was not our case, so I am running an implementation to figure it out. In any case though as you can see in _menu_access_check, there is an execution path (and perhaps more) that can lead to the access key not being created at all, and the error message that results is not a useful piece of information to the user.

pingwin4eg’s picture

Title: Spurious notification under php 5.4.x » Undefined index: access in includes/menu.inc (when custom access_callback does not exist or not get included)
Assigned: MisterSpeed » Unassigned
Status: Active » Needs review
550 bytes
PASSED: [[SimpleTest]]: [MySQL] 39,569 pass(es). View

Oh, you're right. I didn't notice that at first.
OK. But there's one more call to _menu_check_access() and check for item['access'] element in _menu_link_translate(). So I guess it would be better to explicitly set $item['access'] = FALSE in _menu_check_access before all checks.

MisterSpeed’s picture

Status: Needs review » Reviewed & tested by the community

Yup, that works

David_Rothstein’s picture

Status: Reviewed & tested by the community » Fixed

Looks good... committed to 7.x - thanks! http://drupalcode.org/project/drupal.git/commit/82a360d

I verified that the bug does not exist in Drupal 8 (or, interestingly, Drupal 6 either). The function_exists() check which allowed this situation to occur appears to only be a Drupal 7 thing.

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.