Browse Source

report de [15325] [15327] [15329] [15336] [15337]

svn/root/tags/spip-3.0.0-alpha1
Cerdic 13 years ago
parent
commit
47475387d8
  1. 11
      ecrire/balise/formulaire_.php
  2. 32
      ecrire/inc/filtres.php
  3. 10
      ecrire/inc/utils.php
  4. 4
      ecrire/public/compiler.php
  5. 5
      ecrire/public/references.php

11
ecrire/balise/formulaire_.php

@ -14,8 +14,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return; #securite
include_spip('inc/filtres');
function protege_champ($texte){
$texte = entites_html($texte);
$texte = str_replace("'","'",$texte);
if (is_array($texte))
$texte = array_map('protege_champ',$texte);
else {
$texte = entites_html($texte);
$texte = str_replace("'","'",$texte);
}
return $texte;
}
@ -139,8 +143,7 @@ function balise_FORMULAIRE__dyn($form)
if ($action)
$action = parametre_url($action,$champ,''); // nettoyer l'url des champs qui vont etre saisis
// proteger les ' et les " dans les champs que l'on va injecter
if (is_string($valeurs[$champ]))
$valeurs[$champ] = protege_champ($valeurs[$champ]);
$valeurs[$champ] = protege_champ($valeurs[$champ]);
}
}

32
ecrire/inc/filtres.php

@ -61,9 +61,13 @@ function filtre_text_csv_dist($t)
else { $sep = ';'; $hs = '&#59;'; $virg = $pvirg;}
if ($tab > $virg) {$sep = "\t"; $hs = "\t";}
$t = str_replace('""','"',
preg_replace('/\r?\n/', "\n",
preg_replace('/[\r\n]+/', "\n", $t)));
$t = preg_replace('/\r?\n/', "\n",
preg_replace('/[\r\n]+/', "\n", $t));
// un separateur suivi de 3 guillemets attention !
// attention au ; suceptible d'etre confondu avec un separateur
// on substitue un # et on remplacera a la fin
$t = preg_replace("/([\n$sep])\"\"\"/",'\\1"&#34#',$t);
$t = str_replace('""','&#34#',$t);
preg_match_all('/"[^"]*"/', $t, $r);
foreach($r[0] as $cell)
$t = str_replace($cell,
@ -113,12 +117,15 @@ function filtre_text_csv_dist($t)
foreach($lignes as $k=>$v) $lignes[$k] = substr($v,0,-1);
}
$corps = join("\n", $lignes) . "\n";
return propre($caption .
$corps = $caption .
"\n|{{" .
str_replace($sep,'}}|{{',$entete) .
"}}|" .
"\n|" .
str_replace($sep,'|',str_replace("\n", "|\n|",$corps)));
str_replace($sep,'|',str_replace("\n", "|\n|",$corps));
$corps = str_replace('&#34#','"',$corps);
include_spip('inc/texte');
return propre($corps);
}
// Incrustation de HTML, si on est capable de le securiser
@ -137,6 +144,7 @@ function filtre_text_html_dist($t)
$style = join("\n",$r[1]);
// ... et externes
include_spip('inc/distant');
if (preg_match_all(',<link[^>]+type=.text/css[^>]*>,is', $h, $r, PREG_PATTERN_ORDER))
foreach($r[0] as $l) {
preg_match("/href='([^']*)'/", str_replace('"',"'",$l), $m);
@ -549,6 +557,7 @@ function PtoBR($texte){
// Couper les "mots" de plus de $l caracteres (souvent des URLs)
// http://doc.spip.org/@lignes_longues
function lignes_longues($texte, $l = 70) {
if ($l<1) return $texte;
// Passer en utf-8 pour ne pas avoir de coupes trop courtes avec les &#xxxx;
// qui prennent 7 caracteres
#include_spip('inc/charsets');
@ -557,10 +566,10 @@ function lignes_longues($texte, $l = 70) {
// echapper les tags (on ne veut pas casser les a href=...)
$tags = array();
if (preg_match_all('/<.*>/UumsS', $texte, $t, PREG_SET_ORDER)) {
if (preg_match_all('/<.+>/UumsS', $texte, $t, PREG_SET_ORDER)) {
foreach ($t as $n => $tag) {
$tags[$n] = $tag[0];
$texte = str_replace($tag[0], " @@SPIPTAG$n@@ ", $texte);
$texte = str_replace($tag[0], " <---$n---> ", $texte);
}
}
// casser les mots longs qui restent
@ -572,8 +581,11 @@ function lignes_longues($texte, $l = 70) {
}
// retablir les tags
foreach ($tags as $n=>$tag) {
$texte = str_replace(" @@SPIPTAG$n@@ ", $tag, $texte);
if (preg_match_all('/<---[\s0-9]+--->/UumsS', $texte, $t, PREG_SET_ORDER)) {
foreach ($t as $tag) {
$n = intval(preg_replace(',[^0-9]+,U','',$tag[0]));
$texte = str_replace($tag[0], $tags[$n], $texte);
}
}
return importer_charset($texte, 'utf-8');
@ -1551,7 +1563,7 @@ function div($a,$b) {
}
// http://doc.spip.org/@modulo
function modulo($nb, $mod, $add=0) {
return ($nb%$mod)+$add;
return ($mod?$nb%$mod:0)+$add;
}

10
ecrire/inc/utils.php

@ -1252,7 +1252,9 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
spip_desinfecte($_POST);
spip_desinfecte($_COOKIE);
spip_desinfecte($_REQUEST);
spip_desinfecte($GLOBALS);
// ne pas desinfecter les globales en profondeur car elle contient aussi les
// precedentes, qui seraient desinfectees 2 fois.
spip_desinfecte($GLOBALS,false);
// Par ailleurs on ne veut pas de magic_quotes au cours de l'execution
@set_magic_quotes_runtime(0);
@ -1521,7 +1523,7 @@ function init_var_mode(){
// supprimer aussi les eventuels caracteres nuls %00, qui peuvent tromper
// la commande is_readable('chemin/vers/fichier/interdit%00truc_normal')
// http://doc.spip.org/@spip_desinfecte
function spip_desinfecte(&$t) {
function spip_desinfecte(&$t,$deep = true) {
static $magic_quotes;
if (!isset($magic_quotes))
$magic_quotes = @get_magic_quotes_gpc();
@ -1533,8 +1535,8 @@ function spip_desinfecte(&$t) {
$t[$key] = str_replace(chr(0), '-', $t[$key]);
}
// traiter aussi les "texte_plus" de articles_edit
else if ($key == 'texte_plus' AND is_array($t[$key]))
spip_desinfecte($t[$key]);
else if ($deep AND is_array($t[$key]) AND $key!=='GLOBALS')
spip_desinfecte($t[$key],$deep);
}
}

4
ecrire/public/compiler.php

@ -833,8 +833,8 @@ function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $co
// si la table n'existe pas avec le connecteur par defaut,
// c'est peut etre une table qui necessite son connecteur dedie fourni
// permet une ecriture allegee (GEO) -> (geo:GEO)
if (!$show AND $show=$trouver_table($type, $type))
$boucles[$id]->sql_serveur = $type;
if (!$show AND $show=$trouver_table($type, strtolower($type)))
$boucles[$id]->sql_serveur = strtolower($type);
if ($show) {
$boucles[$id]->show = $show;
// recopie les infos les plus importantes

5
ecrire/public/references.php

@ -286,7 +286,10 @@ function collecter_balise_dynamique($l, &$p, $nom) {
// http://doc.spip.org/@balise_distante_interdite
function balise_distante_interdite($p) {
$nom = $p->id_boucle;
if ($nom AND $p->boucles[$nom]->sql_serveur) {
if ($nom
AND $p->boucles[$nom]->sql_serveur
AND !in_array($p->boucles[$nom]->sql_serveur,$GLOBALS['exception_des_connect'])) {
spip_log( $nom .':' . $p->nom_champ .' '._T('zbug_distant_interdit'));
return false;
}

Loading…
Cancel
Save