Valider 46a1d0e7 rédigé par nicod's avatar nicod
Parcourir les fichiers

Stocker les contextes dans des fichiers en cache si la longueur de l’argument...

Stocker les contextes dans des fichiers en cache si la longueur de l’argument géneré est plus long que ce qui est toléré
Cf : https://core.spip.net/issues/3239 et le patch proposé par marcimat

(cherry picked from commit 6c6b6c6d)
parent d07b859f
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+20 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -3713,10 +3713,10 @@ function encoder_contexte_ajax($c, $form = '', $emboite = null, $ajaxid = '') {
	$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
	// OU que la longueur de l''argument generee est plus long
	// que ce que telere Suhosin.
	// on ne stocke pas les contextes dans des fichiers en cache
	// par defaut, sauf si cette configuration a été forcée
	// OU que la longueur de largument géneré est plus long
	// que ce qui est toléré.
	$cache_contextes_ajax = (defined('_CACHE_CONTEXTES_AJAX') and _CACHE_CONTEXTES_AJAX);
	if (!$cache_contextes_ajax) {
		$env = $c;
@@ -3730,9 +3730,20 @@ function encoder_contexte_ajax($c, $form = '', $emboite = null, $ajaxid = '') {
		}
		$env = _xor($env);
		$env = base64_encode($env);
		// tester Suhosin et la valeur maximale des variables en GET...
		if ($max_len = @ini_get('suhosin.get.max_value_length')
			and $max_len < ($len = strlen($env))
		$len = strlen($env);
		// Si l’url est trop longue pour le navigateur
		$max_len = _CACHE_CONTEXTES_AJAX_SUR_LONGUEUR;
		if ($len > $max_len) {
			$cache_contextes_ajax = true;
			spip_log("Contextes AJAX forces en fichiers !"
				. " Cela arrive lorsque la valeur du contexte" 
				. " depasse la longueur maximale autorisee ($max_len). Ici : $len."
				, _LOG_AVERTISSEMENT);
		}
		// Sinon si Suhosin est actif et a une la valeur maximale des variables en GET...
		elseif (
			$max_len = @ini_get('suhosin.get.max_value_length')
			and $max_len < $len
		) {
			$cache_contextes_ajax = true;
			spip_log("Contextes AJAX forces en fichiers !"
@@ -3742,6 +3753,7 @@ function encoder_contexte_ajax($c, $form = '', $emboite = null, $ajaxid = '') {
				. " Vous devriez modifier les parametres de Suhosin"
				. " pour accepter au moins 1024 caracteres.", _LOG_AVERTISSEMENT);
		} 

	}

	if ($cache_contextes_ajax) {
+7 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -514,6 +514,13 @@ if (!defined('_OUTILS_DEVELOPPEURS')) {
	define('_OUTILS_DEVELOPPEURS', false);
}

if (!defined('_CACHE_CONTEXTES_AJAX_SUR_LONGUEUR')) {
	/** 
	 * Basculer les contextes ajax en fichier si la longueur d’url est trop grande 
	 * @var int Nombre de caractères */
	define('_CACHE_CONTEXTES_AJAX_SUR_LONGUEUR', 2000);
}

// charger systematiquement inc/autoriser dans l'espace restreint
if (test_espace_prive()) {
	include_spip('inc/autoriser');