fix(plugins): red de seguridad ante exit() en un gancho y globales del CMS
Tras la revision de codigo de 273c3dd:
- Un exit()/die() dentro de un gancho no es una excepcion y dejaba un cuerpo
que no era JSON. register_shutdown_function en _pluginLifecycle responde
{ok:false, error, messages:[lo impreso]} si el gancho no llego al final.
- event/plugin/origin se castean solo si son escalares (un array producia un
Warning delante del JSON).
- Los ganchos ven CURRENT_USER, menu, action, TABLE_PREFIX y SETTINGS como
un checkpoint desde addPlugins(); documentado en el contrato.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HPL66q9F33YZxbLPUT7KW8
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
3565abdd88
commit
ea8eb6dbcb
@@ -369,6 +369,10 @@ function query($sql)
|
||||
// simplemente terminar. status.php devuelve semaforos:
|
||||
// [["clave" => "...", "estado" => "ok|warn|error", "texto" => "..."], ...].
|
||||
// Lo que el gancho imprima se recoge como mensaje, nunca sale por la respuesta.
|
||||
// El gancho ve $CURRENT_USER, $menu, $action, $TABLE_PREFIX y $SETTINGS como un
|
||||
// checkpoint; cualquier otro global lo declara el. NUNCA exit()/die(): no es una
|
||||
// excepcion, se salta el resultado y solo la red de seguridad de handler_ws.php
|
||||
// evita una respuesta que no sea JSON.
|
||||
// ---------------------------------------------------------------------------
|
||||
function pluginLifecycleEvents() {
|
||||
return array("install", "uninstall", "enable", "disable", "status");
|
||||
@@ -410,7 +414,9 @@ function installPluginArtifacts($path, &$messages) {
|
||||
}
|
||||
|
||||
function _includePluginHook($hookFile, $plugin, $pluginDir, $event, $context, $dropData) {
|
||||
// Ambito propio: el gancho no ve las variables de quien lo llama.
|
||||
// Ambito propio: el gancho no ve las variables de quien lo llama, pero si
|
||||
// los mismos globales del CMS que ve un checkpoint desde addPlugins().
|
||||
global $CURRENT_USER, $menu, $action, $TABLE_PREFIX, $SETTINGS;
|
||||
ob_start();
|
||||
$ret = include $hookFile;
|
||||
$salida = trim((string) ob_get_clean());
|
||||
|
||||
Reference in New Issue
Block a user