Menu Icons conflict check can exhaust PHP memory on AJAX requests

Open
#1,002 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
Half a day
Newbie friendliness
56/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
php, wordpress
Domain
backend

Research direction

Start in obfx_modules/menu-icons/init.php, where check_conflict() is registered on admin_init and includes WordPress's wp-admin/includes/nav-menu.php before checking the walker filter. Inspect that path and reproduce or measure memory use during an AJAX request; the issue reports no test coverage for this module. Done means the conflict check no longer causes the reported AJAX request to exceed the 128 MiB limit, with behavior verified for the relevant request path.

Written by the indexing model from the issue text.

Description

bug-report bug-report-triage crash-report

Summary

Expected behavior: an AJAX request should not fail while the Menu Icons module checks for navigation-walker conflicts. Actual behavior: an AJAX request exhausted the 128 MiB PHP memory limit while the conflict check included WordPress's navigation-menu file. The affected request terminated with a fatal error, so its requested admin operation could not complete.

Customer context

Product / area: Themeisle Companion, Menu Icons module
Version: 3.0.10
Environment: WordPress 7.1.3, PHP 8.5.12, 128 MiB memory limit; AJAX request
Integration / third party: Not provided
Reported error / symptom: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2097152 bytes) at obfx_modules/menu-icons/init.php:310
Impact: Eight reported occurrences on one site during the telemetry window; affected AJAX requests terminated.

Reproduction notes

The crash telemetry reports the failure during an AJAX request on version 3.0.10, with the fatal at obfx_modules/menu-icons/init.php:310. No independent reproduction was available. The specific AJAX action, site workload, and memory use immediately before the include were not captured.

Diagnosis

Conclusion

The reported fatal occurs on a product-owned, unconditional require_once of WordPress's navigation-menu editor file inside the Menu Icons conflict check. That check is registered on admin_init; telemetry records its execution during AJAX. This provides a concrete product request path to the failing allocation, although the available evidence does not establish the file's standalone memory cost or the request's prior memory use.

Where this likely occurs
  • obfx_modules/menu-icons/init.php — Menu_Icons_OBFX_Module::__construct() approx. lines 31–37 registers check_conflict() on admin_init at priority 99.
  • obfx_modules/menu-icons/init.php — Menu_Icons_OBFX_Module::check_conflict() lines 308–313 unconditionally includes wp-admin/includes/nav-menu.php before checking the walker filter. The fatal location reported at line 310 matches this include.
  • The same include and hook are present in the v3.0.10 source and v3.0.11; the relevant path predates the affected version, so regression status is unsubstantiated.
Engineering notes

The source confirms the include is attempted by the plugin path during the reported request; the external WordPress core file and runtime memory profile were not available in this workspace. The report covers one site, so broader impact is unknown. GitHub issue searches for the reported memory error and menu-icon AJAX memory exhaustion found no matching issue.

Test coverage status

No relevant coverage was found during inspection. The checked PHP tests under tests/ did not reference Menu_Icons_OBFX_Module or the menu-icons module; the class itself is annotated @codeCoverageIgnore in obfx_modules/menu-icons/init.php line 16.

What to verify or explore next
  • If the issue is reproduced, compare memory usage immediately before and during check_conflict() on the affected AJAX action.
  • Verify whether the same failure occurs on other AJAX actions or only under the reported site's plugin/workload combination.
  • Confirm behavior on supported PHP and WordPress versions, since the included navigation-menu file is provided by WordPress core and was not present for inspection here.
Unknowns / follow-up

The exact AJAX action, active plugins, current memory usage before the include, and memory cost of the WordPress file are unknown. No customer-site reproduction was performed.

Confidence

Confidence: 78/100

The reported fatal lands on an unconditional include in the Menu Icons conflict check, which is registered on admin_init and ran during an AJAX request. The affected v3.0.10 code contains this path, and the include remains in v3.0.11; no relevant open issue was found. The telemetry does not establish how much memory the external WordPress file consumes, but the product-owned request path attempts the reported allocation there.

Crash telemetry

Occurrences 8
Distinct sites 1
First seen 2026-10-23 20:54 UTC
Last seen 2026-10-28 09:00 UTC
Crash location product:obfx_modules/menu-icons/init.php:310
Request context ajax
Inside Themeisle SDK no
Product versions 3.0.10
WP versions 7.1.3
PHP versions 8.5.12
SDK versions 3.3.65

Source: automated crash report — themeisle-companion, fingerprint 3cf47587c6cdae5f74bce53f7519a890
Generated by bug-report-triage (ID: bug-report-triage_6ae2e19e29fe84.16145281)

Dominant language
PHP
Stars
13
Forks
18
Avg merge
1d 12h
Merged PRs (30d)
10

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Codeinwp/themeisle-companion

All issues in Codeinwp/themeisle-companion

Similar issues

More PHP issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.