Appearance
<div style="display: none;" hidden="true" aria-hidden="true">Are you an LLM? You can read better optimized documentation at /changelog/Changelog.4.100.md for this page in Markdown format</div>
Version 4
version 4.100
[4.100.0] fix(middleware): prevent fatal in
AdvSiteModeMiddlewarewhenSITE_MODE=AdminFrontend- Root cause.
Adv_base_controller::__construct()callssiteModeGuard()before the child constructors (Adv_front_controller,Adv_admin_controller) load thesessionlibrary — that load now lives in the child ctors after the 4.99.16 stateless-REST fix (ad33be8bf). InSiteMode::AdminFrontendmode, the middleware's first condition isisLoggedIn()→get_instance()->session->userdata(...)→ fatalCall to a member function userdata() on nullbecause$ci->sessionis still null at that point. The crash was reported in production onv4-evripidis(evripidis.gr) atauth_helper.php:16and reproduces on any HTTP controller flow when the registry valueGLOBAL.SITE_MODEis2. - Why the naive fix is wrong. Loading
sessionunconditionally inAdv_base_controller::__construct()would re-introduce the regressionad33be8bfremoved: REST endpoints, payment webhooks, feed XML and job runners would each start a PHP session and emitSet-Cookieon otherwise stateless requests. - Fix in
ecommercen/libraries/AdvSiteModeMiddleware.php. Re-ordered theAdminFrontendbranch so namespace/route exemptions (siteModeInstanceOf()+allowedRoutes) are evaluated beforeisLoggedIn(). With this order, REST controllers (matched viasiteModeAllowedNamespaces = ['Advisable\Rest\\']) and configured allowed routes (advisable,advisable/login,soon,maintenance, ...)breakout of the switch before any session machinery is touched. Only the surviving frontend path — a controller that actually serves storefront HTML inAdminFrontendmode — proceeds, and at that point the middleware lazy-loadssessionvia$ci->load->library('session')soisLoggedIn()has a live session to read. CI3's loader is idempotent, so the later child-constructor load is a no-op. - Other modes untouched.
Online,AdminOnly, and CLI paths never reach theAdminFrontendbranch — no session is loaded in those modes, statelessness preserved. - Tests.
--testsuite=Unit2617/2617,--testsuite=Legacy234/234 (6 pre-existing skips unrelated to this change).
- Root cause.
[4.100.0] chore(deps): patch/minor LTS hygiene bumps (Symfony 6.4, flysystem, JWT, FPDI, postal-code-validator)
- firebase/php-jwt v7.0.3 → v7.0.5
- league/flysystem 3.32.0 → 3.33.0
- setasign/fpdi v2.6.4 → v2.6.6
- sirprize/postal-code-validator 1.5.0 → 1.5.1
- symfony/config v6.4.34 → v6.4.37
- symfony/dependency-injection v6.4.34 → v6.4.38
composer audit: "No security vulnerability advisories found"- Autoloader smoke:
Firebase\JWT\JWT,League\Flysystem\Filesystem, Symfony Config + DI co-instantiate cleanly with the bumped versions.
[4.100.0] chore(deps): bump phpspreadsheet to 2.4.5 + phpseclib to 3.0.52 (security)
- CVE-2026-34084 (critical) — SSRF/RCE in
IOFactory::loadwhen reading attacker-controlled spreadsheets. - CVE-2026-40863 (high) — DoS via unbounded row index in the XLSX reader.
- CVE-2026-40902 (high) — DoS via unbounded row number in XLSX row reader.
- CVE-2026-35453 (moderate) — XSS via NumberFormat
@text format. - CVE-2026-40296 (moderate) — XSS via number-format-code
@text format. - CVE-2026-44167 (high) — CVE-2024-27355 mitigation bypass: OID parsing in phpseclib.
- CVE-2026-40194 (low) — variable-time HMAC comparison in phpseclib.
composer audit: "No security vulnerability advisories found".- Autoloader smoke:
PhpOffice\PhpSpreadsheet\Spreadsheetand phpseclib classes load cleanly. composer.jsonunchanged — pure lockfile move.
- CVE-2026-34084 (critical) — SSRF/RCE in
[4.100.0] chore(deps): bump grapesjs floor to ^0.22.16 (#219)
grapesjs.init({ container, fromElement, height, width, plugins, pluginsOpts, storageManager })— stable API.editor.getHtml({ cleanId: true }),editor.getCss(),editor.RichTextEditor.add(...),editor.getSelected(),editor.on('storage:store', ...)— stable event surface.- All seven plugins remain compatible (
grapesjs-preset-webpage, etc.). - 0.22.13 — attribute escaping.
getHtml()now emits& <etc. correctly. - 0.22.15 — border-radius shorthand order in CSS output.
- 0.22.15 — rgba → hex8 conversion for color-picker values.
npm install: no resolution change (lockfile already had ^0.22.16-compatible version).npm run all-production: exit 0, 142 / 41 warnings, 0 errors — unchanged from baseline.
[4.100.0] chore(deps): override webpackbar to ^7.0.0 to support webpack 5.106.x (#225)
package.jsonpinswebpack: ^5.98.0(wide caret).- The previously committed lockfile had
webpack@5.99.9, wherewebpackbar@5.0.2(transitive vialaravel-mix@6.0.49) still worked. - Fresh resolution picks
webpack@5.106.2, which tightened theWebpackPluginInstance.applyschema;webpackbar@5.0.2no longer satisfies it and build fails. laravel-mix@6.0.49pulls inwebpackbar@^5.0.0-3→webpackbar@5.0.2by default.webpackbar@7.0.0(Nov 2024) was rewritten to use the new schema.- Surgical fix on the actual broken dep, not a workaround.
- Keeps us on current webpack patches (security and otherwise).
- Aligned with the Node 24 cutover direction; staying on a six-year-old webpackbar would block future updates.
rm package-lock.json && rm -rf node_modules && npm install: clean resolve.npm run all-production: exit 0. Storefront 142 warnings, admin 41 warnings, 0 errors.
[4.100.0] chore(deps): tighten vue-apexcharts pin to ~1.6.2 (#223)
rm package-lock.json && rm -rf node_modules && npm installclean against the new tilde range.npm run all-productionexit 0 against the committed lockfile, no behaviour change.
[4.100.0] chore(deps): bump axios, lodash-es, lottie-web, sweetalert2 security floors (#216)
- axios
>=1.12.0 <1.14.1 || >=1.14.2→^1.16.0(1.16.0). Also closes axios SSRF advisories. - lodash-es
^4.17.21→^4.18.1(4.18.1). Closes prototype-pollution advisories. - lottie-web
^5.12.2→^5.13.0(5.13.0). Preventive for the Node 24 cutover. - sweetalert2
^11.7.20→^11.22.4(11.26.24). Closes button-focus XSS advisory. - axios: JSON-only usage, no FormData via axios (uploads go through native FormData + fetch).
- lodash-es: only
templateis imported from lodash-es. None of the changed surfaces in 4.18 affect us. - lottie-web: single call site (
assets/main/vue/Lottie.vue) uses the stableloadAnimationAPI. - sweetalert2: no
:focusoverrides on.swal2-confirm/-deny/-cancelin our SCSS — accent-color-aware focus rings inherit cleanly. rm package-lock.json && rm -rf node_modules && npm installfails were verified to be unrelated to these deps.npm run all-production(=npm ci && npm run production && npm run admin-production): exit 0.
- axios
Notes
[4.100.0] REQUIRES
composer install:composer.lockupdated — phpspreadsheet 2.4.5, phpseclib 3.0.52 (security CVEs), Symfony 6.4 patch bumps, flysystem, JWT, FPDI, postal-code-validator hygiene bumps.
[4.100.0] REQUIRES
npm ci && npm run all-production:package.jsonandpackage-lock.jsonupdated — axios, lodash-es, lottie-web, sweetalert2 security floors (#216); vue-apexcharts pin (#223); webpackbar override (#225); grapesjs floor (#219).
[4.100.0] Check for overrides (AdminFrontend site-mode middleware fix):
ecommercen/libraries/AdvSiteModeMiddleware.php—AdminFrontendbranch reordered so namespace/route exemptions run beforeisLoggedIn(). Any client override of this middleware that pinned the old order will re-introduce theuserdata() on nullfatal whenSITE_MODE=AdminFrontend.