Every invocator tag under invocators/tags/. Click one to render it, via <<<TagList>>>.
46 tags — click one to render it.
select_products_by_category() validates the key into $itemKey, then guards on isset($key) and interpolates the RAW $key into SQL. The validated value is dead code one variable name away.
✓ FIXED — CatalogDAO now interpolates the validated $itemKey and guards isset($itemKey); malicious keys sanitise to NULL.
lib/Modules/StoreModule/Catalog/DAO/CatalogDAO.php#L58The constructor sets $this->table but omits the CreateConnection()->open() every sibling DAO has. First query dereferences null.
✓ FIXED — the constructor now opens the STORE connection like sibling DAOs.
lib/Modules/StoreModule/Catalog/DAO/ProductDAO.php#L25Calls $this->insert() (no such method) and passes a bare key to delete() where a WHERE-clause is expected.
✓ FIXED — updateRow now uses deleteRow() (a WHERE clause) and insertRow() (the real insert).
lib/Modules/StoreModule/Order/DAO/OrderDAO.php#L65returnAllBeans() inits to NULL and only fills in-loop; a zero-row query returns null and callers do current(null) -> TypeError.
✓ FIXED — returnAllBeans() now inits array(); a zero-row query returns [].
lib/DatabaseDrivers/MySQL/AbstractDAO.php#L86Controller::display passes a possibly-null document to setData(), which does get_class(null). Silent false in PHP 5; fatal TypeError in PHP 8.
✓ RESOLVED — setData guards get_class with is_object(); DocumentManager falls back to the invalid document for missing pages.
lib/PersistanceObjectManager/PersistentObjectManager.php#L75execute_all_tags recurses into a tag’s rendered output with no depth/visited guard. A document whose Title is <<<TitleTag>>> loops forever.
✓ FIXED — execute_all_tags now caps recursion depth at 64.
lib/TagLoader/Tag/Tag_Wrapper.php#L81The store/order/auth modules use MYSQL_STORE_DATABASE, ETC, … that Constants.php never defines. Undefined constants are fatal on PHP 8 — why Install.txt says “does not execute.”
✓ RESOLVED — config-as-data (constants.default.json + configure.php) now defines MYSQL_*, ETC, ….
www/Constants.phpexecute() drains the queue with array_pop(), so commands fire last-in-first-out.
lib/CommandQueues/InterfaceObject/CommandInterfaceObject.php#L38