X-Git-Url: http://git.cyclocoop.org/?p=lhc%2Fweb%2Fclavette_www.git;a=blobdiff_plain;f=www%2Fecrire%2Finc%2Ffiltres.php;h=96df45ba7c94f66b045c4988550c2b642b3a3ceb;hp=ae61ab252a41fc17d81861fe39f52013270f66eb;hb=cc641eb476987612f6d6df1a5417c1c5582a8ab8;hpb=7d84a490677fb716a1fd4df260f8eab35f6a8506 diff --git a/www/ecrire/inc/filtres.php b/www/ecrire/inc/filtres.php index ae61ab2..96df45b 100644 --- a/www/ecrire/inc/filtres.php +++ b/www/ecrire/inc/filtres.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2014 * + * Copyright (c) 2001-2016 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -419,6 +419,19 @@ function filtrer_entites($texte) { return $texte; } +/** + * Version securisee de filtrer_entites + * @param string $t + * @return string + */ +if (!function_exists('filtre_filtrer_entites_dist')) { + function filtre_filtrer_entites_dist($t) { + include_spip('inc/texte'); + return interdire_scripts(filtrer_entites($t)); + } +} + + // caracteres de controle - http://www.w3.org/TR/REC-xml/#charsets // http://doc.spip.org/@supprimer_caracteres_illegaux function supprimer_caracteres_illegaux($texte) { @@ -426,7 +439,7 @@ function supprimer_caracteres_illegaux($texte) { static $to = null; if (is_array($texte)) { - return array_map('corriger_caracteres_windows', $texte); + return array_map('supprimer_caracteres_illegaux', $texte); } if (!$to) $to = str_repeat('-', strlen($from)); @@ -1322,8 +1335,8 @@ function filtrer_ical($texte) { function date_ical($date, $addminutes = 0) { list($heures, $minutes, $secondes) = recup_heure($date); list($annee, $mois, $jour) = recup_date($date); - return date("Ymd\THis", - mktime($heures, $minutes+$addminutes,$secondes,$mois,$jour,$annee)); + + return gmdate("Ymd\THis\Z", mktime($heures, $minutes + $addminutes, $secondes, $mois, $jour, $annee)); } // date_iso retourne la date au format "RFC 3339" / "ISO 8601" @@ -2201,21 +2214,31 @@ function url_absolue_css ($css) { * @param mixed $defaut * Valeur par defaut retournee si la cle demandee n'existe pas * + * @param bool $conserver_null + * Permet de forcer la fonction à renvoyer la valeur null d'un index + * et non pas $defaut comme cela est fait naturellement par la fonction + * isset. On utilise alors array_key_exists() à la place de isset(). + * * @return mixed Valeur trouvee ou valeur par defaut. **/ -function table_valeur($table, $cle, $defaut='') { +function table_valeur($table, $cle, $defaut = '', $conserver_null = false) { foreach (explode('/', $cle) as $k) { $table = is_string($table) ? @unserialize($table) : $table; if (is_object($table)) { - $table = (($k !== "") and isset($table->$k)) ? $table->$k : $defaut; + $table = (($k !== "") and isset($table->$k)) ? $table->$k : $defaut; } elseif (is_array($table)) { - $table = isset($table[$k]) ? $table[$k] : $defaut; + if ($conserver_null) { + $table = array_key_exists($k, $table) ? $table[$k] : $defaut; + } else { + $table = isset($table[$k]) ? $table[$k] : $defaut; + } } else { $table = $defaut; } } + return $table; } @@ -2507,8 +2530,10 @@ function encoder_contexte_ajax($c,$form='', $emboite=NULL, $ajaxid='') { if (!function_exists('calculer_cle_action')) include_spip("inc/securiser_action"); - $cle = calculer_cle_action($form.(is_array($c)?serialize($c):$c)); - $c = serialize(array($c,$cle)); + + $c = serialize($c); + $cle = calculer_cle_action($form . $c); + $c = "$cle:$c"; // on ne stocke pas les contextes dans des fichiers caches // par defaut, sauf si cette configuration a ete forcee @@ -2554,8 +2579,10 @@ function encoder_contexte_ajax($c,$form='', $emboite=NULL, $ajaxid='') { $r = self(); $r = ' data-origin="'.$r.'"'; $class = 'ajaxbloc'; - if ($ajaxid AND is_string($ajaxid)){ - $class .= ' ajax-id-'.$ajaxid; + if ($ajaxid and is_string($ajaxid)) { + // ajaxid est normalement conforme a un nom de classe css + // on ne verifie pas la conformite, mais on passe entites_html par dessus par precaution + $class .= ' ajax-id-' . entites_html($ajaxid); } return "
\n$emboite
\n"; } @@ -2575,10 +2602,20 @@ function decoder_contexte_ajax($c,$form='') { if (function_exists('gzdeflate') && function_exists('gzinflate')) $c = @gzinflate($c); } - list($env, $cle) = @unserialize($c); - if ($cle == calculer_cle_action($form.(is_array($env)?serialize($env):$env))) - return $env; + // extraire la signature en debut de contexte + // et la verifier avant de deserializer + // format : signature:donneesserializees + if ($p = strpos($c,":")){ + $cle = substr($c,0,$p); + $c = substr($c,$p+1); + + if ($cle == calculer_cle_action($form . $c)) { + $env = @unserialize($c); + return $env; + } + } + return false; }