diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index ff63624dfe35b5ca4e32c9df38d126f667495140..090b2539e467dff9248f2c29ef47eb586759e1f4 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -1764,7 +1764,7 @@ function filtre_pagination_dist($total, $nom, $position, $pas, $liste = true, $m return $bloc_ancre; if ($modele) $modele = '_'.$modele; - return recuperer_fond("modeles/pagination$modele", $pagination, false, true, $connect); + return recuperer_fond("modeles/pagination$modele", $pagination, true, $connect); } // recuperere le chemin d'une css existante et : diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index 6bf5e63f000698547f385d3c2b69c1706631818c..1292e6539d0b8c58d16d3df6b9d883d3e65796b1 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -1330,9 +1330,6 @@ function evaluer_fond ($fond, $contexte=array(), $options=array(), $connect=null if (!isset($GLOBALS['_INC_PUBLIC'])) $GLOBALS['_INC_PUBLIC'] = 0; $GLOBALS['_INC_PUBLIC']++; - // option[s] par defaut - $options = array_merge( array('protect_xml' => false), $options); - if (isset($contexte['fond']) AND $fond === '') $fond = $contexte['fond']; @@ -1340,16 +1337,14 @@ function evaluer_fond ($fond, $contexte=array(), $options=array(), $connect=null $page = inclure_page($fond, $contexte, $connect); if ($GLOBALS['flag_ob'] AND ($page['process_ins'] != 'html')) { ob_start(); + xml_hack($page, true); eval('?' . '>' . $page['texte']); $page['texte'] = ob_get_contents(); + xml_hack($page); $page['process_ins'] = 'html'; ob_end_clean(); } - if (isset($page['entetes']['X-Xml-Hack']) - AND isset($options['protect_xml']) AND $options['protect_xml']) - $page['texte'] = str_replace("<\1?xml", '<'.'?xml', $page['texte']); - $GLOBALS['_INC_PUBLIC']--; return $page; diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php index 016c68619e83eaf6e177c1076538786a163217aa..f4fdb2b1e551b47c16a8d3f3cce81ee565681f98 100644 --- a/ecrire/inc_version.php +++ b/ecrire/inc_version.php @@ -305,7 +305,7 @@ $spip_sql_version = 1; // (ce qui marche pour yy ne marchera pas forcement sur une version plus ancienne) // type nouvelles fonctionnalites, deplacement de fonctions ... $spip_version_affichee = '1.9.3 dev'; -$spip_version_code = '1.9301'; +$spip_version_code = '1.9302'; // ** Securite ** $visiteur_session = $auteur_session = $connect_statut = $connect_toutes_rubriques = $hash_recherche = $hash_recherche_strict = $ldap_present =''; diff --git a/ecrire/public.php b/ecrire/public.php index 426a6d2eb55fc3b6b7a4f777b3ddc0c85ddb27ba..665b15cb0b87093cac7885aeb51012d8d74d6c51 100644 --- a/ecrire/public.php +++ b/ecrire/public.php @@ -26,8 +26,11 @@ if ($GLOBALS['_INC_PUBLIC']>0) { if ($subpage['process_ins'] == 'html'){ echo $subpage['texte']; } - else + else { + xml_hack($subpage, true); eval('?' . '>' . $subpage['texte']); + // xml_hack($subpage); # sera nettoye apres l'eval() final + } // est-ce possible ? if (isset($subpage['lang_select']) @@ -172,10 +175,6 @@ if ($GLOBALS['_INC_PUBLIC']>0) { $spip_compter_visites = in_array($page['entetes']['X-Spip-Visites'],array('oui','non'))?$page['entetes']['X-Spip-Visites']:$spip_compter_visites; unset($page['entetes']['X-Spip-Visites']); } - - // 0. xml-hack - if ($xml_hack = isset($page['entetes']['X-Xml-Hack'])) - unset($page['entetes']['X-Xml-Hack']); // 1. Cas d'une page contenant uniquement du HTML : if ($page['process_ins'] == 'html') { @@ -191,18 +190,22 @@ if ($GLOBALS['_INC_PUBLIC']>0) { // envoi des entetes if (!$flag_ob) { foreach($page['entetes'] as $k => $v) @header("$k: $v"); + xml_hack($page, true); eval('?' . '>' . $page['texte']); $page['texte'] = ''; + // xml_hack($page); # inutile :( } // sinon, inclure_balise_dynamique nous enverra peut-etre // quelques en-tetes de plus (voire qq envoyes directement) else { ob_start(); + xml_hack($page, true); $res = eval('?' . '>' . $page['texte']); $page['texte'] = ob_get_contents(); + xml_hack($page); ob_end_clean(); - + foreach($page['entetes'] as $k => $v) @header("$k: $v"); // en cas d'erreur lors du eval, // la memoriser dans le tableau des erreurs @@ -212,6 +215,7 @@ if ($GLOBALS['_INC_PUBLIC']>0) { erreur_squelette(_T('zbug_erreur_execution_page')); } } + } if ($html) $page = analyse_js_ajoutee($page); @@ -234,10 +238,6 @@ if ($GLOBALS['_INC_PUBLIC']>0) { // Post-traitements et affichage final // - // Report du hack pour <?xml (cf. public/compiler.php) - if ($xml_hack) - $page['texte'] = str_replace("<\1?xml", '<'.'?xml', $page['texte']); - // (c'est ici qu'on fait var_recherche, tidy, boutons d'admin, // cf. public/assembler.php) echo pipeline('affichage_final', $page['texte']); diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php index 9f46faf141ae1ee858d2ae3e993a889b032d525d..ccec409433d2add049dd5f396102ba3b026506eb 100644 --- a/ecrire/public/assembler.php +++ b/ecrire/public/assembler.php @@ -329,8 +329,10 @@ function inclure_balise_dynamique($texte, $echo=true, $ligne=0) { $texte = $page['texte']; } else { ob_start(); + xml_hack($page, true); eval('?' . '>' . $page['texte']); $texte = ob_get_contents(); + xml_hack($page); ob_end_clean(); } } @@ -550,11 +552,8 @@ function message_erreur_404 ($erreur= "") { // fonction permettant de recuperer le resultat du calcul d'un squelette // pour une inclusion dans un flux // http://doc.spip.org/@recuperer_fond -function recuperer_fond($fond, $contexte=array(), $protect_xml=true, $trim=true, $connect='') { - $options = array( - 'protect_xml' => $protect_xml, - 'trim' => $trim - ); +function recuperer_fond($fond, $contexte=array(), $trim=true, $connect='') { + $options = array('trim' => $trim); $texte = ""; foreach(is_array($fond) ? $fond : array($fond) as $f){ @@ -705,4 +704,12 @@ function inclure_modele($type, $id, $params, $lien, $connect='') { return $retour; } +// Appeler avant et apres chaque eval() +function xml_hack(&$page, $echap = false) { + if ($echap) + $page['texte'] = str_replace('<'.'?xml', "<\1?xml", $page['texte']); + else + $page['texte'] = str_replace("<\1?xml", '<'.'?xml', $page['texte']); +} + ?> diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php index 0a31f175b3aefd8ec196d4c4f6637d09a8a143de..2c81790078bb27f092048e34cb9ca3dfdf283bb2 100644 --- a/ecrire/public/balises.php +++ b/ecrire/public/balises.php @@ -490,7 +490,7 @@ function balise_LESAUTEURS_dist ($p) { $p->code = "recuperer_fond( 'modeles/lesauteurs', array('id_article' => ".champ_sql('id_article', $p) - ."), false, true, " + ."), true, " . sql_quote($connect) .")"; $p->interdire_scripts = false; // securite apposee par recuperer_fond() @@ -1014,7 +1014,7 @@ function balise_INCLURE_dist($p) { $l = "array_merge(\$Pile[0],$l)"; } $connect = $p->boucles[$p->id_boucle]->sql_serveur; - $p->code = "recuperer_fond('',".$l.",true, false, " . sql_quote($connect) .")"; + $p->code = "recuperer_fond('',".$l.", false, " . sql_quote($connect) .")"; } else { $n = interprete_argument_balise(1,$p); $p->code = '(($c = find_in_path(' . $n . ')) ? spip_file_get_contents($c) : "")'; @@ -1069,7 +1069,7 @@ function balise_MODELE_dist($p) { $connect = $p->boucles[$p->id_boucle]->sql_serveur; $p->code = "( ((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))<5)? recuperer_fond('modeles/".$nom."', - creer_contexte_de_modele(array(".join(',', $code_contexte).",'recurs='.(++\$recurs), \$GLOBALS['spip_lang'])),false,true," . sql_quote($connect) . "):'')"; + creer_contexte_de_modele(array(".join(',', $code_contexte).",'recurs='.(++\$recurs), \$GLOBALS['spip_lang'])), true, " . sql_quote($connect) . "):'')"; $p->interdire_scripts = false; // securite assuree par le squelette return $p; diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php index 557a8fc78358f33b2ab9d6bc6af0c1d6af34e9b4..01d8f0daed60e31d4bcb89bfb29d35f51594dbab 100644 --- a/ecrire/public/compiler.php +++ b/ecrire/public/compiler.php @@ -683,9 +683,6 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect='') include_spip('inc/charsets'); $squelette = transcoder_page($squelette); - // Hacke un eventuel tag xml "<?xml" pour qu'il ne soit pas traite comme php - $squelette = str_replace('<'.'?xml', "#HTTP_HEADER{X-Xml-Hack: ok}<\1?xml", $squelette); - // Phraser le squelette, selon sa grammaire // pour le moment: "html" seul connu (HTML+balises BOUCLE) $boucles = array(); diff --git a/ecrire/public/parametrer.php b/ecrire/public/parametrer.php index e18d4b47f30b7f4429948591f2249bf573123def..3285c208bc154a4afb978a6d897e1ca83a04be50 100644 --- a/ecrire/public/parametrer.php +++ b/ecrire/public/parametrer.php @@ -75,9 +75,16 @@ function analyse_resultat_skel($nom, $cache, $corps) { $headers[$j] = $r[3]; } + $process_ins = ( + strpos($corps,'<'.'?') === false + OR strpos(str_replace('<'.'?xml', '', $corps),'<'.'?') === false + ) + ? 'html' + : 'php'; + return array('texte' => $corps, 'squelette' => $nom, - 'process_ins' => ((strpos($corps,'<'.'?')=== false)?'html':'php'), + 'process_ins' => $process_ins, 'invalideurs' => $cache, 'entetes' => $headers, 'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0