nodeaccess_delete_user_reference inadvertently load a huge list of users

Created on 30 December 2015, almost 10 years ago
Updated 25 September 2025, 11 days ago

When a node is saved with a change in a "user reference" field, nodeaccess_delete_user_reference() function is called.

If the previous contents of the field is empty, then the function calls user_load_multiple by passing a parameter to "false".

On a site with many users, causes a "Fatal error: Allowed memory size of ...", because is loading a full list of users.

Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried to allocate 99 bytes) in /var/www/mysitehtml/modules/field/field.attach.inc on line 696
Stack trace:
  1. {main}() /var/www/mysitehtml/index.php:0
  2. menu_execute_active_handler() /var/www/mysitehtml/index.php:21
  3. call_user_func_array:{/var/www/mysitehtml/includes/menu.inc:527}() /var/www/mysitehtml/includes/menu.inc:527
  4. page_manager_node_edit() /var/www/mysitehtml/includes/menu.inc:527
  5. ctools_context_handler_get_task_contexts() /var/www/mysitehtml/sites/all/modules/contrib/ctools/page_manager/plugins/tasks/node_edit.inc:92
  6. ctools_context_get_context_from_arguments() /var/www/mysitehtml/sites/all/modules/contrib/ctools/includes/context-task-handler.inc:333
  7. ctools_context_get_context_from_argument() /var/www/mysitehtml/sites/all/modules/contrib/ctools/includes/context.inc:859
  8. ctools_node_edit_context() /var/www/mysitehtml/sites/all/modules/contrib/ctools/includes/context.inc:803
  9. ctools_context_create() /var/www/mysitehtml/sites/all/modules/contrib/ctools/plugins/arguments/node_edit.inc:36
 10. ctools_context_create_node_edit_form() /var/www/mysitehtml/sites/all/modules/contrib/ctools/includes/context.inc:607
 11. drupal_build_form() /var/www/mysitehtml/sites/all/modules/contrib/ctools/plugins/contexts/node_edit_form.inc:70
 12. drupal_process_form() /var/www/mysitehtml/includes/form.inc:385
 13. form_execute_handlers() /var/www/mysitehtml/includes/form.inc:903
 14. node_form_submit() /var/www/mysitehtml/includes/form.inc:1519
 15. node_save() /var/www/mysitehtml/modules/node/node.pages.inc:460
 16. module_invoke_all() /var/www/mysitehtml/modules/node/node.module:1180
 17. call_user_func_array:{/var/www/mysitehtml/includes/module.inc:934}() /var/www/mysitehtml/includes/module.inc:934
 18. nodeaccess_node_update() /var/www/mysitehtml/includes/module.inc:934
 19. nodeaccess_delete_user_reference() /var/www/mysitehtml/sites/all/modules/contrib/nodeaccess/nodeaccess.module:699
 20. user_load_multiple() /var/www/mysitehtml/sites/all/modules/contrib/nodeaccess/nodeaccess.module:968
 21. entity_load() /var/www/mysitehtml/modules/user/user.module:291
 22. DrupalDefaultEntityController->load() /var/www/mysitehtml/includes/common.inc:7962
 23. UserController->attachLoad() /var/www/mysitehtml/includes/entity.inc:206
 24. DrupalDefaultEntityController->attachLoad() /var/www/mysitehtml/modules/user/user.module:337
 25. field_attach_load() /var/www/mysitehtml/includes/entity.inc:354

I add a validation (if) to check if "field_get_items()" is false.

    $user_uids = field_get_items('node', $node, $field_name);

    if($user_uids) {
      $user_references = user_load_multiple($user_uids);
      foreach ($user_references as $user) {
        unset($form_values['uid'][$user->uid]);
      }
    }
🐛 Bug report
Status

Postponed: needs info

Version

1.4

Component

Code

Created by

🇨🇱Chile sir_gon

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

No activities found.

Production build 0.71.5 2024