diff --git a/public/balises.php b/public/balises.php index 1c3c6cff4cb969d822e791aef7247563afbcc1b7..c946736caca5b3fc292f77a3cda129e238b6be98 100644 --- a/public/balises.php +++ b/public/balises.php @@ -1210,7 +1210,7 @@ function balise_GRAND_TOTAL_dist($p) { * tel que `var_mode`. * * @note - * Attention dans un `INCLURE()` ou une balise dynamique, on n'a pas le droit de + * Attention dans un `INCLURE` ou une balise dynamique, on n'a pas le droit de * mettre en cache `#SELF` car il peut correspondre à une autre page (attaque XSS) * (Dans ce cas faire <INCLURE{self=#SELF}> pour différencier les caches.) * diff --git a/public/compiler.php b/public/compiler.php index 6d7a7341726619c9741f1dd36e014dcd1b01b838..059b54e82ede4235b6d63cef7d29a2df8dbf00c8 100644 --- a/public/compiler.php +++ b/public/compiler.php @@ -11,6 +11,7 @@ use Spip\Compilateur\Noeud\Boucle; use Spip\Compilateur\Noeud\Contexte; +use Spip\Compilateur\Noeud\Inclure; use Spip\Compilateur\Noeud\Texte; /** @@ -50,7 +51,7 @@ include_spip('public/balises'); // Gestion des jointures include_spip('public/jointures'); -// Les 2 ecritures INCLURE{A1,A2,A3...} et INCLURE(A1){A2}{A3}... sont admises +// Les 2 ecritures INCLURE{A1,A2,A3...} et INCLURE{A1}{A2}{A3}... sont admises // Preferer la premiere. // Les Ai sont de la forme Vi=Ei ou bien Vi qui veut alors dire Vi=Vi // Le resultat est un tableau indexe par les Vi @@ -149,7 +150,7 @@ function argumenter_inclure( } /** - * Code d'appel à un <INCLURE()> + * Code d'appel à un <INCLURE> * * Code PHP pour un squelette (aussi pour #INCLURE, #MODELE #LES_AUTEURS) */ @@ -228,23 +229,18 @@ function calculer_inclure($p, &$boucles, $id_boucle) { $contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)"; } - // s'il y a une extension .php, ce n'est pas un squelette - if ($fichier && preg_match('/^.+[.]php$/s', $fichier)) { - $code = sandbox_composer_inclure_php($fichier, $p, $contexte); - } else { - $_options[] = "\"compil\"=>array($compil)"; - if ($ajax) { - $_options[] = $ajax; - } - $code = " ' . argumenter_squelette($code) . '"; - $code = 'echo ' . sprintf( - CODE_RECUPERER_FOND, - $code, - $contexte, - implode(',', $_options), - "_request(\\'connect\\') ?? \\'\\'" - ) . ';'; + $_options[] = "\"compil\"=>array($compil)"; + if ($ajax) { + $_options[] = $ajax; } + $code = " ' . argumenter_squelette($code) . '"; + $code = 'echo ' . sprintf( + CODE_RECUPERER_FOND, + $code, + $contexte, + implode(',', $_options), + "_request(\\'connect\\') ?? \\'\\'" + ) . ';'; return "\n'<'.'" . '?php ' . $code . "\n?'." . "'>'"; } diff --git a/public/debusquer.php b/public/debusquer.php index 8d7d9fb19ec519c7d0b3e4293754a81ffc658647..dee89b41abe233ab45804df81c3ec559975e3980 100644 --- a/public/debusquer.php +++ b/public/debusquer.php @@ -89,7 +89,7 @@ function public_debusquer_dist($message = '', $lieu = '', $opt = []) { set_request('var_mode', 'debug'); $GLOBALS['bouton_admin_debug'] = true; // Permettre a la compil de continuer - if (is_object($lieu) && (!isset($lieu->code) || !$lieu->code)) { + if (is_object($lieu) && property_exists($lieu, 'code') && !$lieu->code) { $lieu->code = "''"; } // loger diff --git a/public/normaliser.php b/public/normaliser.php index 240b6b551603526413ecdd89bb75e0215a51647c..7f5e5bd8247d5a0872d529c30631ca3c1af4ab43 100644 --- a/public/normaliser.php +++ b/public/normaliser.php @@ -86,6 +86,5 @@ function normaliser_inclure($champ) { return; } } - spip_logger('vieilles_def') - ->info('inclure sans fond ni fichier'); + spip_logger('vieilles_def')->info('inclure sans fond'); } diff --git a/public/phraser_html.php b/public/phraser_html.php index d5398976a54430f16844362387160679f4cd1ed7..4ecbf8c33f448a2b6515a7ad5fc6c5b07709b5ac 100644 --- a/public/phraser_html.php +++ b/public/phraser_html.php @@ -58,7 +58,7 @@ define('NOM_DE_CHAMP', '#((' . NOM_DE_BOUCLE . "):)?(([A-F]*[G-Z_][A-Z_0-9]*)|[A /** Balise complète [...(#TOTO) ... ] */ define('CHAMP_ETENDU', '/\[([^\[]*?)\(' . NOM_DE_CHAMP . '([^)]*\)[^]]*)\]/S'); -define('BALISE_INCLURE', '/<INCLU[DR]E[[:space:]]*(\(([^)]*)\))?/S'); +define('BALISE_INCLURE', '/<INCLU[DR]E[[:space:]]*/S'); define('BALISE_POLYGLOTTE', ',<multi>(.*)</multi>,Uims'); define('BALISE_IDIOMES', ',<:(([a-z0-9_]+):)?([a-z0-9_]*)({([^\|=>]*=[^\|>]*)})?((\|[^>]*)?:/?>),iS'); define('BALISE_IDIOMES_ARGS', '@^\s*([^= ]*)\s*=\s*((' . NOM_DE_CHAMP . '[{][^}]*})?[^,]*)\s*,?\s*@s'); @@ -79,7 +79,6 @@ function phraser_inclure(string $texte, int $ligne, array $result): array { ) { $poss = array_column($match, 1); $match = array_column($match, 0); - $match = array_pad($match, 3, null); $p = $poss[0]; $debut = substr($texte, 0, $p); @@ -91,27 +90,17 @@ function phraser_inclure(string $texte, int $ligne, array $result): array { $champ = new Inclure(); $champ->ligne = $ligne; $ligne += public_compte_ligne((string) $match[0]); - $fichier = $match[2]; - $champ->texte = $fichier; - $texte = substr($texte, $p + strlen((string) $match[0])); // on assimile {var=val} a une liste de un argument sans fonction $pos_apres = 0; phraser_args($texte, '/>', '', $result, $champ, $pos_apres); - if (!$champ->texte || (is_countable($champ->param) ? count($champ->param) : 0) > 1) { - if (!function_exists('normaliser_inclure')) { - include_spip('public/normaliser'); - } - normaliser_inclure($champ); + if (!function_exists('normaliser_inclure')) { + include_spip('public/normaliser'); } + normaliser_inclure($champ); + $pos_fin = strpos($texte, '>', $pos_apres) + 1; - if ( - (strpos($texte, '</INCLUDE>', $pos_fin) === $pos_fin) - || (strpos($texte, '</INCLURE>', $pos_fin) === $pos_fin) - ) { - $pos_fin += 10; - } $texte = substr($texte, $pos_fin); $result[] = $champ; } @@ -361,7 +350,7 @@ function phraser_champs_etendus(string $texte, int $ligne, array $result): array * sert aussi aux arguments des includes et aux criteres de boucles * Tres chevelu * - * @param Champ|Inclure|Idiome|Boucle $pointeur_champ + * @param Champ|Inclure|Boucle $pointeur_champ */ function phraser_args( string $texte, diff --git a/public/sandbox.php b/public/sandbox.php index 1ffb1f3c2ed6a198b10e5aff927dd6c8af918bdf..a4a957330d74f7b73c0fd58deebbfe7894c7e1af 100644 --- a/public/sandbox.php +++ b/public/sandbox.php @@ -111,33 +111,6 @@ function analyser_arguments_filtre(string $function): array { ]; } -// Calculer un <INCLURE(xx.php)> -// La constante ci-dessous donne le code general quand il s'agit d'un script. -define('CODE_INCLURE_SCRIPT', 'if (!($path = %s) OR !is_readable($path)) - erreur_squelette(array("fichier_introuvable", array("fichier" => "%s")), array(%s)); -else { - $contexte_inclus = %s; - include $path; -} -'); - -/** - * Composer le code d'inclusion PHP - * - * @param string $fichier - * @param Champ $p - * Balise créant l'inclusion - * @param string $_contexte Chaine PHP qui écrira le contexte 'array(...)' - * @return string - */ -function sandbox_composer_inclure_php($fichier, &$p, $_contexte) { - $compil = texte_script(memoriser_contexte_compil($p)); - // si inexistant, on essaiera a l'execution - $path = ($path = find_in_path($fichier)) ? "\"$path\"" : "find_in_path(\"$fichier\")"; - - return sprintf(CODE_INCLURE_SCRIPT, $path, $fichier, $compil, $_contexte); -} - /** * Composer le code de sécurisation anti script *