Menu Icons conflict check can exhaust PHP memory on AJAX requests
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- Half a day
- Newbie friendliness
- 56/100
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
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 registerscheck_conflict()onadmin_initat priority 99.obfx_modules/menu-icons/init.php—Menu_Icons_OBFX_Module::check_conflict()lines 308–313 unconditionally includeswp-admin/includes/nav-menu.phpbefore 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
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Codeinwp/themeisle-companion
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Codeinwp/themeisle-companion#1014 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Codeinwp/themeisle-companion#1013 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
Codeinwp/themeisle-companion#1009 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
Codeinwp/themeisle-companion#1008 ·
Maintainers usually reply within 1 day
-
Difficulty 3/5 1-2 days Newbie friendliness 77/100
Codeinwp/themeisle-companion#1015 · 1 comment ·
Maintainers usually reply within 1 day
All issues in Codeinwp/themeisle-companion
Similar issues
-
sync-en
Difficulty 2/5 1-3 hours Newbie friendliness 71/100
Maintainers usually reply within 1 day
-
sync-en
Difficulty 1/5 1-3 hours Newbie friendliness 75/100
Maintainers usually reply within 1 day
-
repo:cms
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
craftcms/cms#20596 · 1 comment ·
Maintainers usually reply within 1 day
-
Перевод устарел
Difficulty 2/5 1-3 hours Newbie friendliness 61/100
Maintainers usually reply within 1 day
-
Credit Memos grid labels the credit memo date "Created"Possibly taken @atIOCrON claimed this today. OpenArea: Admin UI Component: Order grid Issue: Confirmed Priority: P3 Reported on 2.4.x Reproduced on 2.4.x
Difficulty 1/5 Under an hour Newbie friendliness 93/100
magento/magento2#41855 · 4 comments ·
Maintainers usually reply within 3 days