diff -Nru spip-3.1.4/debian/changelog spip-3.1.4/debian/changelog --- spip-3.1.4/debian/changelog 2020-09-21 18:54:11.000000000 +0100 +++ spip-3.1.4/debian/changelog 2022-05-31 20:32:23.000000000 +0100 @@ -1,3 +1,55 @@ +spip (3.1.4-4~deb9u5ubuntu0.1) bionic-security; urgency=medium + + * Backport from Debian stretch to fix CVE-2020-28984, CVE-2022-26846 and + CVE-2022-26847 (LP: #1971185). + + -- Luís Infante da Câmara Tue, 31 May 2022 20:32:23 +0100 + +spip (3.1.4-4~deb9u5) stretch-security; urgency=medium + + * Non-maintainer upload. + * Switch back to a sane version number. + * Add missing dependency on php-xml. + * Recommend php-gd. + * Fix security issues, backported from buster: + * XSS: + - 0049-Verifier-qu-on-a-bien-le-droit-de-modifier-le-login-.patch + - 0050-appliquer-rawurlencode-aussi-sur-les-tableaux-qu-on-.patch + * CVE-2022-26846, CVE-2022-26847: + - 0022-Utilisation-des-fonctions-de-sanitization-sur-galeri.patch + + prerequisite. + - 0051-D-pr-cier-et-s-curiser-l-insertion-d-une-galerie-dan.patch + + Don't use nullable types, not available in PHP 7.0 in stretch. + + -- Emilio Pozuelo Monfort Tue, 15 Mar 2022 11:19:04 +0100 + +spip (3.1.4-4~deb9u4+deb9u2) stretch-security; urgency=high + + * Non-maintainer upload by the LTS Security Team. + * Backport security fixes from 3.2.12 + - SQL injections, remote code execution, XSS + * Fix Articles and Sections editing screens in admin area, which got broken in + previous upload. + * Fix user Preferences screen, which got broken in 3.1.4-4~deb9u4. + + -- Sylvain Beucler Wed, 29 Dec 2021 16:39:34 +0100 + +spip (3.1.4-4~deb9u4+deb9u1) stretch-security; urgency=medium + + * Non-maintainer upload by the Debian LTS Team. + * Fix TEMP-0000000-803658 + + -- Abhijith PA Tue, 02 Mar 2021 11:45:50 +0530 + +spip (3.1.4-4~deb9u4) stretch-security; urgency=medium + + * Non-maintainer upload by the LTS Security Team. + * Fix CVE-2020-28984: did not correctly validate he couleur, + display, display_navigation, display_outils, imessage, and + spip_ecran parameters. + + -- Abhijith PA Wed, 09 Dec 2020 09:59:07 +0530 + spip (3.1.4-4~deb9u3build0.18.04.1) bionic-security; urgency=medium * fake sync from Debian diff -Nru spip-3.1.4/debian/control spip-3.1.4/debian/control --- spip-3.1.4/debian/control 2019-09-16 23:02:26.000000000 +0100 +++ spip-3.1.4/debian/control 2022-05-31 20:32:23.000000000 +0100 @@ -25,11 +25,13 @@ php-html-safe, php-mysql | php-pgsql | php-sqlite3, php-pclzip, + php-xml, php-xml-htmlsax3, ${misc:Depends} Recommends: imagemagick | netpbm, mysql-server | virtual-mysql-server | postgresql, - php-sqlite3 + php-gd, + php-sqlite3, Description: website engine for publishing SPIP is a publishing system for the Internet in which great importance is attached to collaborative working, to multilingual environments, diff -Nru spip-3.1.4/debian/patches/0022-Utilisation-des-fonctions-de-sanitization-sur-galeri.patch spip-3.1.4/debian/patches/0022-Utilisation-des-fonctions-de-sanitization-sur-galeri.patch --- spip-3.1.4/debian/patches/0022-Utilisation-des-fonctions-de-sanitization-sur-galeri.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0022-Utilisation-des-fonctions-de-sanitization-sur-galeri.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,31 @@ +From: Cerdic +Date: Fri, 5 Jun 2020 16:55:17 +0200 +Subject: Utilisation des fonctions de sanitization sur galerie et _galerie en + lien avec #4494 du core + +Origin: upstream, https://git.spip.net/spip/medias/commit/bc5a5175c36237cf12a042d37b30f336255e22e0 +--- + plugins-dist/medias/formulaires/joindre_document.html | 2 +- + .../medias/prive/squelettes/inclure/mediatheque-navigation.html | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +--- a/plugins-dist/medias/formulaires/joindre_document.html ++++ b/plugins-dist/medias/formulaires/joindre_document.html +@@ -20,5 +20,5 @@ + + ] + [(#ENV{_galerie,''}|oui) +- [(#INCLURE{fond=#ENV{_galerie}, env, ajax})] ++ [(#INCLURE{fond=#ENV{_galerie}|spip_sanitize_from_request{_galerie,vide}, env, ajax})] + ] +--- a/plugins-dist/medias/prive/squelettes/inclure/mediatheque-navigation.html ++++ b/plugins-dist/medias/prive/squelettes/inclure/mediatheque-navigation.html +@@ -57,7 +57,7 @@ +
+ #FORMULAIRE_RECHERCHE_ECRIRE{#GET{self},ajax} + +- ++ + +
+ [(#GET{editable}) diff -Nru spip-3.1.4/debian/patches/0023-attribut_html-sur-les-attributs-renvoy-s-par-env_to_.patch spip-3.1.4/debian/patches/0023-attribut_html-sur-les-attributs-renvoy-s-par-env_to_.patch --- spip-3.1.4/debian/patches/0023-attribut_html-sur-les-attributs-renvoy-s-par-env_to_.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0023-attribut_html-sur-les-attributs-renvoy-s-par-env_to_.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,34 @@ +From: b_b +Date: Mon, 1 Feb 2021 09:10:47 +0100 +Subject: =?utf-8?q?attribut=5Fhtml=28=29_sur_les_attributs_renvoy=C3=A9s_pa?= + =?utf-8?q?r_env=5Fto=5Fparams=28=29_=26_env=5Fto=5Fattributs=28=29?= + +fix #4602 + +Origin: upstream, https://git.spip.net/spip/spip/commit/f1f27e9f764b8feda9d5a071f100d6c9dfea3481 +--- + ecrire/inc/filtres.php | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: spip-3.1.4/ecrire/inc/filtres.php +=================================================================== +--- spip-3.1.4.orig/ecrire/inc/filtres.php ++++ spip-3.1.4/ecrire/inc/filtres.php +@@ -4397,7 +4397,7 @@ function env_to_params($env, $ignore_par + if ($env) { + foreach ($env as $i => $j) { + if (is_string($j) and !in_array($i, $ignore_params)) { +- $texte .= ""; ++ $texte .= ""; + } + } + } +@@ -4436,7 +4436,7 @@ function env_to_attributs($env, $ignore_ + if ($env) { + foreach ($env as $i => $j) { + if (is_string($j) and !in_array($i, $ignore_params)) { +- $texte .= $i . "='" . $j . "' "; ++ $texte .= attribut_html($i) . "='" . attribut_html($j) . "' "; + } + } + } diff -Nru spip-3.1.4/debian/patches/0024-TEMP-0000000-803658-part-2.patch spip-3.1.4/debian/patches/0024-TEMP-0000000-803658-part-2.patch --- spip-3.1.4/debian/patches/0024-TEMP-0000000-803658-part-2.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0024-TEMP-0000000-803658-part-2.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,15 @@ +Description: + + 0024-viter-d-afficher-n-importe-quoi-dans-le-message-d-di.patch + +--- spip-3.1.4.orig/ecrire/inc/editer.php ++++ spip-3.1.4/ecrire/inc/editer.php +@@ -137,7 +137,7 @@ function formulaires_editer_objet_verifi + if (!isset($erreurs[$champ])) { + $erreurs[$champ] = ''; + } +- $erreurs[$champ] .= _T("alerte_modif_info_concourante") . "
"; ++ $erreurs[$champ] .= _T('alerte_modif_info_concourante') . "
'; + } + } + } diff -Nru spip-3.1.4/debian/patches/0025-une-fonction-pour-detecter-qu-un-formulaire-a-ete-in.patch spip-3.1.4/debian/patches/0025-une-fonction-pour-detecter-qu-un-formulaire-a-ete-in.patch --- spip-3.1.4/debian/patches/0025-une-fonction-pour-detecter-qu-un-formulaire-a-ete-in.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0025-une-fonction-pour-detecter-qu-un-formulaire-a-ete-in.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,37 @@ +From: Cerdic +Date: Mon, 1 Feb 2021 15:44:28 +0100 +Subject: une fonction pour detecter qu'un formulaire a ete inclu via un + modele et non directement via une balide #FORMULAIRE_xxx + +Origin: upstream, https://git.spip.net/spip/spip/commit/c35edb7692ad19626a1c1daa1d6f73250f428e22 +--- + ecrire/balise/formulaire_.php | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/ecrire/balise/formulaire_.php b/ecrire/balise/formulaire_.php +index 5da751e..7d78f48 100644 +--- a/ecrire/balise/formulaire_.php ++++ b/ecrire/balise/formulaire_.php +@@ -78,6 +78,22 @@ function existe_formulaire($form) { + return trouver_fond($form, 'formulaires/') ? $form : false; + } + ++/** ++ * Tester si un formulaire est appele via un modele type et le cas echeant retourne les arguments passes au modele ++ * false sinon ++ * @return false|array ++ */ ++function test_formulaire_inclus_par_modele() { ++ $trace = debug_backtrace(null, 20); ++ $trace_fonctions = array_column($trace, 'function'); ++ $trace_fonctions = array_map('strtolower', $trace_fonctions); ++ if (in_array('eval', $trace_fonctions) and in_array('inclure_modele', $trace_fonctions)) { ++ $k = array_search('inclure_modele', $trace_fonctions); ++ // les arguments de recuperer_fond() passes par inclure_modele() ++ return $trace[$k-1]['args'][1]['args']; ++ } ++ return false; ++} + + /** + * Balises Formulaires par défaut. diff -Nru spip-3.1.4/debian/patches/0026-Utiliser-contexte_compil-pour-reperer-les-appels-a-e.patch spip-3.1.4/debian/patches/0026-Utiliser-contexte_compil-pour-reperer-les-appels-a-e.patch --- spip-3.1.4/debian/patches/0026-Utiliser-contexte_compil-pour-reperer-les-appels-a-e.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0026-Utiliser-contexte_compil-pour-reperer-les-appels-a-e.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,115 @@ +From: Cerdic +Date: Mon, 1 Feb 2021 17:40:16 +0100 +Subject: Utiliser contexte_compil pour reperer les appels a + executer_balise_dynamique() venant d'un modele, + et lever un flag le temps du traitement de la balise dynamique + +Origin: upstream, https://git.spip.net/spip/spip/commit/962a95f44e75b9748fd84354046eb19f063a8e3e +--- + ecrire/balise/formulaire_.php | 14 ++++++++++++++ + ecrire/public/assembler.php | 8 ++++++++ + ecrire/public/composer.php | 22 +++++++++++++++++++++- + 3 files changed, 43 insertions(+), 1 deletion(-) + +Index: spip-3.1.4/ecrire/balise/formulaire_.php +=================================================================== +--- spip-3.1.4.orig/ecrire/balise/formulaire_.php ++++ spip-3.1.4/ecrire/balise/formulaire_.php +@@ -87,6 +87,20 @@ function test_formulaire_inclus_par_mode + $trace = debug_backtrace(null, 20); + $trace_fonctions = array_column($trace, 'function'); + $trace_fonctions = array_map('strtolower', $trace_fonctions); ++ ++ // regarder si un flag a ete leve juste avant l'appel de balise_FORMULAIRE_dyn ++ if (!empty($GLOBALS["balise_dyn_appellee_par_modele"]) ++ and $form = existe_formulaire($GLOBALS["balise_dyn_appellee_par_modele"])) { ++ if (in_array('balise_formulaire__dyn', $trace_fonctions)) { ++ $k = array_search('balise_formulaire__dyn', $trace_fonctions); ++ if ($trace[$k]['args'][0] === $form) { ++ return $trace[$k]['args']; ++ } ++ } ++ } ++ ++ // fallback qui ne repose pas sur le flag lie a l'analyse de contexte_compil, ++ // mais ne marche pas si executer_balise_dynamique est appelee via du php dans le squelette + if (in_array('eval', $trace_fonctions) and in_array('inclure_modele', $trace_fonctions)) { + $k = array_search('inclure_modele', $trace_fonctions); + // les arguments de recuperer_fond() passes par inclure_modele() +Index: spip-3.1.4/ecrire/public/assembler.php +=================================================================== +--- spip-3.1.4.orig/ecrire/public/assembler.php ++++ spip-3.1.4/ecrire/public/assembler.php +@@ -344,6 +344,9 @@ function public_produire_page_dist( + // 4: langue + + function inserer_balise_dynamique($contexte_exec, $contexte_compil) { ++ if (!empty($GLOBALS["balise_dyn_appellee_par_modele"])) { ++ unset($GLOBALS["balise_dyn_appellee_par_modele"]); ++ } + if (!is_array($contexte_exec)) { + echo $contexte_exec; + } // message d'erreur etc +@@ -456,6 +459,11 @@ function message_page_indisponible($page + return $page; + } + ++function arguments_balise_dyn_depuis_modele($arg) { ++ $GLOBALS["balise_dyn_appellee_par_modele"] = $arg; ++ return $arg; ++} ++ + // temporairement ici : a mettre dans le futur inc/modeles + // creer_contexte_de_modele('left', 'autostart=true', ...) renvoie un array() + // http://code.spip.net/@creer_contexte_de_modele +Index: spip-3.1.4/ecrire/public/composer.php +=================================================================== +--- spip-3.1.4.orig/ecrire/public/composer.php ++++ spip-3.1.4/ecrire/public/composer.php +@@ -399,11 +399,18 @@ function synthetiser_balise_dynamique($n + if (strncmp($file, "/", 1) !== 0) { + $file = './" . _DIR_RACINE . "' . $file; + } ++ ++ $args = array_map('argumenter_squelette', $args); ++ if (!empty($context_compil['appel_php_depuis_modele'])) { ++ $args[0] = 'arguments_balise_dyn_depuis_modele('.$args[0].')'; ++ } ++ $args = join(', ', $args); ++ + $r = sprintf(CODE_INCLURE_BALISE, + $file, + $context_compil[4] ? $context_compil[4] : '', + $nom, +- join(', ', array_map('argumenter_squelette', $args)), ++ $args, + join(', ', array_map('_q', $context_compil))); + + return $r; +@@ -467,6 +474,16 @@ function executer_balise_dynamique($nom, + $nomfonction = $nom; + $nomfonction_generique = ""; + ++ $appel_php_depuis_modele = false; ++ if (is_array($context_compil) ++ and !is_numeric($context_compil[3]) ++ and empty($context_compil[0]) ++ and empty($context_compil[1]) ++ and empty($context_compil[2]) ++ and empty($context_compil[3])) { ++ $appel_php_depuis_modele = true; ++ } ++ + // Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article') + if (false !== ($p = strpos($nom, "_"))) { + $nomfonction_generique = substr($nom, 0, $p + 1); +@@ -526,6 +543,9 @@ function executer_balise_dynamique($nom, + } + } + ++ if ($appel_php_depuis_modele) { ++ $context_compil['appel_php_depuis_modele'] = true; ++ } + return synthetiser_balise_dynamique($nomfonction, $r, $file, $context_compil); + + } diff -Nru spip-3.1.4/debian/patches/0027-on-accepte-pas-une-fonction-de-config-inconnue-si-el.patch spip-3.1.4/debian/patches/0027-on-accepte-pas-une-fonction-de-config-inconnue-si-el.patch --- spip-3.1.4/debian/patches/0027-on-accepte-pas-une-fonction-de-config-inconnue-si-el.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0027-on-accepte-pas-une-fonction-de-config-inconnue-si-el.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,36 @@ +From: Cerdic +Date: Mon, 1 Feb 2021 15:46:05 +0100 +Subject: on accepte pas une fonction de config inconnue si elle vient d'un + modele + +Origin: upstream, f9d9e5b1a0927a54c214f9cbaac8617093365a19 +--- + ecrire/inc/editer.php | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +Index: spip-3.1.4/ecrire/inc/editer.php +=================================================================== +--- spip-3.1.4.orig/ecrire/inc/editer.php ++++ spip-3.1.4/ecrire/inc/editer.php +@@ -204,9 +204,21 @@ function formulaires_editer_objet_charge + $row = array(), + $hidden = '' + ) { ++ + $table_objet = table_objet($type); + $table_objet_sql = table_objet_sql($type); + $id_table_objet = id_table_objet($type); ++ ++ // on accepte pas une fonction de config inconnue si elle vient d'un modele ++ if ($config_fonc ++ and !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config']) ++ and $config_fonc !== $table_objet . '_edit_config') { ++ if ($args = test_formulaire_inclus_par_modele() ++ and in_array($config_fonc, $args)) { ++ $config_fonc = ''; ++ } ++ } ++ + $new = !is_numeric($id); + // Appel direct dans un squelette + if (!$row) { diff -Nru spip-3.1.4/debian/patches/0028-Eviter-de-donner-sa-langue-au-chat.patch spip-3.1.4/debian/patches/0028-Eviter-de-donner-sa-langue-au-chat.patch --- spip-3.1.4/debian/patches/0028-Eviter-de-donner-sa-langue-au-chat.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0028-Eviter-de-donner-sa-langue-au-chat.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,34 @@ +From: Cerdic +Date: Mon, 1 Feb 2021 16:01:48 +0100 +Subject: Eviter de donner sa langue au chat + +Origin: upstrem, https://git.spip.net/spip/spip/commit/a8493a3ce249af00d0c93f4a8deee00e8a048ded +--- + ecrire/public/composer.php | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php +index cc93546..c3d1174 100644 +--- a/ecrire/public/composer.php ++++ b/ecrire/public/composer.php +@@ -400,6 +400,11 @@ function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) { + $file = './" . _DIR_RACINE . "' . $file; + } + ++ $lang = $context_compil[4]; ++ if (preg_match(",\W,", $lang)) { ++ $lang = ''; ++ } ++ + $args = array_map('argumenter_squelette', $args); + if (!empty($context_compil['appel_php_depuis_modele'])) { + $args[0] = 'arguments_balise_dyn_depuis_modele('.$args[0].')'; +@@ -408,7 +413,7 @@ function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) { + + $r = sprintf(CODE_INCLURE_BALISE, + $file, +- $context_compil[4] ? $context_compil[4] : '', ++ $lang, + $nom, + $args, + join(', ', array_map('_q', $context_compil))); diff -Nru spip-3.1.4/debian/patches/0029-Eviter-d-utiliser-une-globale-gerer-le-flag-en-stati.patch spip-3.1.4/debian/patches/0029-Eviter-d-utiliser-une-globale-gerer-le-flag-en-stati.patch --- spip-3.1.4/debian/patches/0029-Eviter-d-utiliser-une-globale-gerer-le-flag-en-stati.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0029-Eviter-d-utiliser-une-globale-gerer-le-flag-en-stati.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,73 @@ +From: Cerdic +Date: Tue, 2 Feb 2021 10:28:55 +0100 +Subject: Eviter d'utiliser une globale, + gerer le flag en static avec operations de lecture+reset + +Origin: upstream, https://git.spip.net/spip/spip/commit/610c24f065611bea94e8517b3495d5ea906107a8 +--- + ecrire/balise/formulaire_.php | 4 ++-- + ecrire/public/assembler.php | 29 +++++++++++++++++++++++------ + 2 files changed, 25 insertions(+), 8 deletions(-) + +Index: spip-3.1.4/ecrire/balise/formulaire_.php +=================================================================== +--- spip-3.1.4.orig/ecrire/balise/formulaire_.php ++++ spip-3.1.4/ecrire/balise/formulaire_.php +@@ -89,8 +89,8 @@ function test_formulaire_inclus_par_mode + $trace_fonctions = array_map('strtolower', $trace_fonctions); + + // regarder si un flag a ete leve juste avant l'appel de balise_FORMULAIRE_dyn +- if (!empty($GLOBALS["balise_dyn_appellee_par_modele"]) +- and $form = existe_formulaire($GLOBALS["balise_dyn_appellee_par_modele"])) { ++ if (function_exists('arguments_balise_dyn_depuis_modele') ++ and $form = arguments_balise_dyn_depuis_modele(null, 'read')) { + if (in_array('balise_formulaire__dyn', $trace_fonctions)) { + $k = array_search('balise_formulaire__dyn', $trace_fonctions); + if ($trace[$k]['args'][0] === $form) { +Index: spip-3.1.4/ecrire/public/assembler.php +=================================================================== +--- spip-3.1.4.orig/ecrire/public/assembler.php ++++ spip-3.1.4/ecrire/public/assembler.php +@@ -344,9 +344,8 @@ function public_produire_page_dist( + // 4: langue + + function inserer_balise_dynamique($contexte_exec, $contexte_compil) { +- if (!empty($GLOBALS["balise_dyn_appellee_par_modele"])) { +- unset($GLOBALS["balise_dyn_appellee_par_modele"]); +- } ++ arguments_balise_dyn_depuis_modele(null, 'reset'); ++ + if (!is_array($contexte_exec)) { + echo $contexte_exec; + } // message d'erreur etc +@@ -459,9 +458,27 @@ function message_page_indisponible($page + return $page; + } + +-function arguments_balise_dyn_depuis_modele($arg) { +- $GLOBALS["balise_dyn_appellee_par_modele"] = $arg; +- return $arg; ++/** ++ * gerer le flag qui permet de reperer qu'une balise dynamique a ete inseree depuis un modele ++ * utilisee dans les #FORMULAIRE_xx ++ * ++ * @param string|null $arg ++ * @param string $operation ++ * @return mixed ++ */ ++function arguments_balise_dyn_depuis_modele($arg, $operation = 'set') { ++ static $balise_dyn_appellee_par_modele = null; ++ switch ($operation) { ++ case 'read': ++ return $balise_dyn_appellee_par_modele; ++ case 'reset': ++ $balise_dyn_appellee_par_modele = null; ++ return null; ++ case 'set': ++ default: ++ $balise_dyn_appellee_par_modele = $arg; ++ return $arg; ++ } + } + + // temporairement ici : a mettre dans le futur inc/modeles diff -Nru spip-3.1.4/debian/patches/0030-appels-a-autoriser-sur-les-formulaires-editer-a-mini.patch spip-3.1.4/debian/patches/0030-appels-a-autoriser-sur-les-formulaires-editer-a-mini.patch --- spip-3.1.4/debian/patches/0030-appels-a-autoriser-sur-les-formulaires-editer-a-mini.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0030-appels-a-autoriser-sur-les-formulaires-editer-a-mini.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,58 @@ +From: Cerdic +Date: Mon, 1 Feb 2021 15:46:43 +0100 +Subject: appels a autoriser sur les formulaires editer, + a minima quand on les utilise en modification d'un objet existant depuis un + modele + +Origin: upstream, https://git.spip.net/spip/spip/commit/2269d0a6ad1b6b53e09900644d56bb8d08f9a18b +--- + prive/formulaires/editer_article.php | 7 +++++++ + prive/formulaires/editer_rubrique.php | 10 +++++++++- + 2 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/prive/formulaires/editer_article.php b/prive/formulaires/editer_article.php +index f02b1ef..d9fc2c4 100644 +--- a/prive/formulaires/editer_article.php ++++ b/prive/formulaires/editer_article.php +@@ -64,6 +64,13 @@ function formulaires_editer_article_charger_dist( + $row, + $hidden + ); ++ ++ if (test_formulaire_inclus_par_modele()) { ++ if (intval($id_article) and !autoriser('modifier', 'article', intval($id_article))) { ++ $valeurs['editable'] = ''; ++ } ++ } ++ + // il faut enlever l'id_rubrique car la saisie se fait sur id_parent + // et id_rubrique peut etre passe dans l'url comme rubrique parent initiale + // et sera perdue si elle est supposee saisie +diff --git a/prive/formulaires/editer_rubrique.php b/prive/formulaires/editer_rubrique.php +index c5735b7..a1a087b 100644 +--- a/prive/formulaires/editer_rubrique.php ++++ b/prive/formulaires/editer_rubrique.php +@@ -55,7 +55,7 @@ function formulaires_editer_rubrique_charger_dist( + $row = array(), + $hidden = '' + ) { +- return formulaires_editer_objet_charger( ++ $valeurs = formulaires_editer_objet_charger( + 'rubrique', + $id_rubrique, + $id_parent, +@@ -65,6 +65,14 @@ function formulaires_editer_rubrique_charger_dist( + $row, + $hidden + ); ++ ++ if (test_formulaire_inclus_par_modele()){ ++ if (intval($id_rubrique) and !autoriser('modifier', 'rubrique', intval($id_rubrique))){ ++ $valeurs['editable'] = ''; ++ } ++ } ++ ++ return $valeurs; + } + + /** diff -Nru spip-3.1.4/debian/patches/0031-verifier-l-autorisation-de-modifier-le-site-passe-en.patch spip-3.1.4/debian/patches/0031-verifier-l-autorisation-de-modifier-le-site-passe-en.patch --- spip-3.1.4/debian/patches/0031-verifier-l-autorisation-de-modifier-le-site-passe-en.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0031-verifier-l-autorisation-de-modifier-le-site-passe-en.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,27 @@ +From: Cerdic +Date: Thu, 4 Feb 2021 12:02:39 +0100 +Subject: verifier l'autorisation de modifier le site passe en argument du + formulaire d'edition + +Origin: backport, https://git.spip.net/spip/sites/commit/92994f3fabcd16de2740c655ee6c841af0e908eb +--- + plugins-dist/sites/formulaires/editer_site.php | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/plugins-dist/sites/formulaires/editer_site.php b/plugins-dist/sites/formulaires/editer_site.php +index 331d675..51cc17a 100644 +--- a/plugins-dist/sites/formulaires/editer_site.php ++++ b/plugins-dist/sites/formulaires/editer_site.php +@@ -61,6 +61,12 @@ function formulaires_editer_site_charger_dist( + $valeurs['logo'] = ''; + $valeurs['format_logo'] = ''; + ++ if (test_formulaire_inclus_par_modele()) { ++ if (intval($id_syndic) and !autoriser('modifier', 'site', intval($id_syndic))) { ++ $valeurs['editable'] = ''; ++ } ++ } ++ + return $valeurs; + } + diff -Nru spip-3.1.4/debian/patches/0032-Verifier-les-autorisations-de-modifier-les-mots-grou.patch spip-3.1.4/debian/patches/0032-Verifier-les-autorisations-de-modifier-les-mots-grou.patch --- spip-3.1.4/debian/patches/0032-Verifier-les-autorisations-de-modifier-les-mots-grou.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0032-Verifier-les-autorisations-de-modifier-les-mots-grou.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,47 @@ +From: Cerdic +Date: Thu, 4 Feb 2021 12:01:10 +0100 +Subject: Verifier les autorisations de modifier les mots/groupes de mots + passes en argument du formulaire d'edition + +Origin: backport, https://git.spip.net/spip/mots/commit/0955e0da2bcfaa7a65a68d2009dcf7088ccbdc62 +--- + plugins-dist/mots/formulaires/editer_groupe_mot.php | 7 +++++++ + plugins-dist/mots/formulaires/editer_mot.php | 7 +++++++ + 2 files changed, 14 insertions(+) + +diff --git a/plugins-dist/mots/formulaires/editer_groupe_mot.php b/plugins-dist/mots/formulaires/editer_groupe_mot.php +index ee921da..709b1b8 100644 +--- a/plugins-dist/mots/formulaires/editer_groupe_mot.php ++++ b/plugins-dist/mots/formulaires/editer_groupe_mot.php +@@ -47,6 +47,13 @@ function formulaires_editer_groupe_mot_charger_dist( + ) { + $valeurs = formulaires_editer_objet_charger('groupe_mots', $id_groupe, 0, '', $retour, $config_fonc, $row, $hidden); + ++ if (test_formulaire_inclus_par_modele()) { ++ if (intval($id_groupe) and !autoriser('modifier', 'groupemots', intval($id_groupe))) { ++ $valeurs['editable'] = ''; ++ } ++ } ++ ++ + $valeurs['tables_liees'] = explode(',', $valeurs['tables_liees']); + + // par defaut a la creation de groupe +diff --git a/plugins-dist/mots/formulaires/editer_mot.php b/plugins-dist/mots/formulaires/editer_mot.php +index 78335d4..b876078 100644 +--- a/plugins-dist/mots/formulaires/editer_mot.php ++++ b/plugins-dist/mots/formulaires/editer_mot.php +@@ -63,6 +63,13 @@ function formulaires_editer_mot_charger_dist( + $valeurs['id_groupe'] = $valeurs['id_parent']; + } + ++ if (test_formulaire_inclus_par_modele()) { ++ if (intval($id_mot) and !autoriser('modifier', 'mot', intval($id_mot))) { ++ $valeurs['editable'] = ''; ++ } ++ } ++ ++ + if ($associer_objet) { + if (intval($associer_objet)) { + // compat avec l'appel de la forme ajouter_id_article diff -Nru spip-3.1.4/debian/patches/0033-Verifier-l-autorisation-de-modifier-les-documents-pa.patch spip-3.1.4/debian/patches/0033-Verifier-l-autorisation-de-modifier-les-documents-pa.patch --- spip-3.1.4/debian/patches/0033-Verifier-l-autorisation-de-modifier-les-documents-pa.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0033-Verifier-l-autorisation-de-modifier-les-documents-pa.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,45 @@ +From: Cerdic +Date: Thu, 4 Feb 2021 12:00:30 +0100 +Subject: Verifier l'autorisation de modifier les documents passes en argument + du formulaire + +Origin: backport, https://git.spip.net/spip/medias/commit/96bf7b265459e414ef35362e2ea7c8b71d247e15 +--- + plugins-dist/medias/formulaires/editer_document.php | 6 ++++++ + plugins-dist/medias/formulaires/illustrer_document.php | 6 ++++++ + 2 files changed, 12 insertions(+) + +Index: spip-3.1.4/plugins-dist/medias/formulaires/editer_document.php +=================================================================== +--- spip-3.1.4.orig/plugins-dist/medias/formulaires/editer_document.php ++++ spip-3.1.4/plugins-dist/medias/formulaires/editer_document.php +@@ -31,6 +31,12 @@ function formulaires_editer_document_cha + $valeurs = formulaires_editer_objet_charger('document', $id_document, $id_parent, $lier_trad, $retour, $config_fonc, + $row, $hidden); + ++ if (test_formulaire_inclus_par_modele()) { ++ if (intval($id_document) and !autoriser('modifier', 'document', intval($id_document))) { ++ $valeurs['editable'] = ''; ++ } ++ } ++ + // relier les parents + $valeurs['parents'] = array(); + $valeurs['_hidden'] = ""; +Index: spip-3.1.4/plugins-dist/medias/formulaires/illustrer_document.php +=================================================================== +--- spip-3.1.4.orig/plugins-dist/medias/formulaires/illustrer_document.php ++++ spip-3.1.4/plugins-dist/medias/formulaires/illustrer_document.php +@@ -33,6 +33,12 @@ function formulaires_illustrer_document_ + $valeurs['id_vignette'] = $vignette['id_document']; + $valeurs['_pipeline'] = array('editer_contenu_objet', array('type' => 'illustrer_document', 'id' => $id_document)); + ++ if (test_formulaire_inclus_par_modele()) { ++ if (intval($id_document) and !autoriser('modifier', 'document', intval($id_document))) { ++ $valeurs['editable'] = ''; ++ } ++ } ++ + return $valeurs; + } + diff -Nru spip-3.1.4/debian/patches/0035-ne-pas-stocker-le-champ-ldap_password-dans-les-fichi.patch spip-3.1.4/debian/patches/0035-ne-pas-stocker-le-champ-ldap_password-dans-les-fichi.patch --- spip-3.1.4/debian/patches/0035-ne-pas-stocker-le-champ-ldap_password-dans-les-fichi.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0035-ne-pas-stocker-le-champ-ldap_password-dans-les-fichi.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,28 @@ +From: b_b +Date: Fri, 5 Feb 2021 15:56:21 +0100 +Subject: ne pas stocker le champ ldap_password dans les fichiers de session +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +cassera peut-être 299e6f496b1c790e8c049b30228e009372c8ddfd + +fix #4514 + +Origin: upstream, https://git.spip.net/spip/spip/commit/bb69f3466f31fb1243a1fbd0c989e89c0f695aa7 +--- + ecrire/inc/auth.php | 1 + + 1 file changed, 1 insertion(+) + +Index: spip-3.1.4/ecrire/inc/auth.php +=================================================================== +--- spip-3.1.4.orig/ecrire/inc/auth.php ++++ spip-3.1.4/ecrire/inc/auth.php +@@ -225,6 +225,7 @@ function auth_init_droits($row) { + unset($GLOBALS['visiteur_session']['htpass']); + unset($GLOBALS['visiteur_session']['alea_actuel']); + unset($GLOBALS['visiteur_session']['alea_futur']); ++ unset($GLOBALS['visiteur_session']['ldap_password']); + + // creer la session au besoin + if (!isset($_COOKIE['spip_session'])) { diff -Nru spip-3.1.4/debian/patches/0036-nettoyer-l-adresse-site-qu-on-enregistre-fix-4629.patch spip-3.1.4/debian/patches/0036-nettoyer-l-adresse-site-qu-on-enregistre-fix-4629.patch --- spip-3.1.4/debian/patches/0036-nettoyer-l-adresse-site-qu-on-enregistre-fix-4629.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0036-nettoyer-l-adresse-site-qu-on-enregistre-fix-4629.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,22 @@ +From: Cerdic +Date: Fri, 5 Feb 2021 18:04:02 +0100 +Subject: nettoyer l'adresse site qu'on enregistre fix #4629 + +Origin: upstream, https://git.spip.net/spip/spip/commit/930941a669b6db224e9b0fe008711dbece0aa530 +--- + ecrire/inc/config.php | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/ecrire/inc/config.php b/ecrire/inc/config.php +index d18d569..ede9c12 100644 +--- a/ecrire/inc/config.php ++++ b/ecrire/inc/config.php +@@ -607,6 +607,8 @@ function appliquer_adresse_site($adresse_site) { + $adresse_site = "http://$adresse_site"; + } + ++ $adresse_site = entites_html($adresse_site); ++ + ecrire_meta('adresse_site', $adresse_site); + } + diff -Nru spip-3.1.4/debian/patches/0037-4625-echapper-les-valeurs-injectees-dans-le-js-via-l.patch spip-3.1.4/debian/patches/0037-4625-echapper-les-valeurs-injectees-dans-le-js-via-l.patch --- spip-3.1.4/debian/patches/0037-4625-echapper-les-valeurs-injectees-dans-le-js-via-l.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0037-4625-echapper-les-valeurs-injectees-dans-le-js-via-l.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,75 @@ +From: Cerdic +Date: Mon, 8 Feb 2021 11:59:20 +0100 +Subject: 4625 : echapper les valeurs injectees dans le js via les parametres + mediabox, c'est plus propre + +Origin: upstream, https://git.spip.net/spip/mediabox/commit/9020d1609c6be9293bf2b5c35c13176231490d29 +--- + plugins-dist/mediabox/mediabox_pipelines.php | 41 +++++++++++++++------------- + plugins-dist/mediabox/paquet.xml | 2 +- + 2 files changed, 23 insertions(+), 20 deletions(-) + +--- a/plugins-dist/mediabox/mediabox_pipelines.php ++++ b/plugins-dist/mediabox/mediabox_pipelines.php +@@ -67,23 +67,23 @@ function mediabox_insert_head_css($flux) + */ + $configmediabox = '' . "\n" . $flux; +@@ -101,6 +101,9 @@ var box_settings_splash_height = "' . $c + return $flux; + } + ++function mediabox_quote_js_param($valeur) { ++ return str_replace(["'", "<"], ["\\'", "<"], $valeur); ++} + + function mediabox_timestamp($fichier) { + if ($m = filemtime($fichier)) { diff -Nru spip-3.1.4/debian/patches/0038-Utiliser-valider_url_distante-en-plus-de-tester_url_.patch spip-3.1.4/debian/patches/0038-Utiliser-valider_url_distante-en-plus-de-tester_url_.patch --- spip-3.1.4/debian/patches/0038-Utiliser-valider_url_distante-en-plus-de-tester_url_.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0038-Utiliser-valider_url_distante-en-plus-de-tester_url_.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,48 @@ +From: Cerdic +Date: Tue, 7 Dec 2021 10:45:48 +0100 +Subject: Utiliser valider_url_distante() en plus de tester_url_absolue() + avant de faire une copie locale sur un document distant (+ on reverifie + apres copie_locale que la source est toujours licite et que rien n'a change + entre temps) + +(cherry picked from commit 9b8d1487ef067b5bdb2ce7365cc65d0e7ec0fa44) + +Origin: upstream, https://git.spip.net/spip/medias/commit/1a4b7024cf728ec531658967b374c5ec6f36ee42 +--- + plugins-dist/medias/action/copier_local.php | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +Index: spip-3.1.4/plugins-dist/medias/action/copier_local.php +=================================================================== +--- spip-3.1.4.orig/plugins-dist/medias/action/copier_local.php ++++ spip-3.1.4/plugins-dist/medias/action/copier_local.php +@@ -59,12 +59,14 @@ function action_copier_local_post($id_do + + // si la source est bien un fichier distant + // sinon c'est une donnee moisie, on ne fait rien +- if (tester_url_absolue($source)){ +- +- include_spip('inc/distant'); // pour 'copie_locale' ++ include_spip('inc/distant'); ++ if (tester_url_absolue($source) ++ and valider_url_distante($source)) { + $fichier = copie_locale($source); +- if ($fichier +- and tester_url_absolue($source)) { ++ if ( ++ $fichier ++ and valider_url_distante($source) ++ ) { + $fichier = _DIR_RACINE . $fichier; + $files[] = array('tmp_name' => $fichier, 'name' => basename($fichier)); + $ajouter_documents = charger_fonction('ajouter_documents', 'action'); +@@ -82,6 +84,9 @@ function action_copier_local_post($id_do + + } else { + spip_log("echec copie locale $source", "medias" . _LOG_ERREUR); ++ if ($fichier) { ++ @unlink(_DIR_RACINE . $fichier); ++ } + } + } else { + spip_log("echec copie locale $source n'est pas une URL distante", "medias" . _LOG_ERREUR); diff -Nru spip-3.1.4/debian/patches/0039-Fix-refactoring-query_echappe_textes-qui-ne-detectai.patch spip-3.1.4/debian/patches/0039-Fix-refactoring-query_echappe_textes-qui-ne-detectai.patch --- spip-3.1.4/debian/patches/0039-Fix-refactoring-query_echappe_textes-qui-ne-detectai.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0039-Fix-refactoring-query_echappe_textes-qui-ne-detectai.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,116 @@ +From: Cerdic +Date: Mon, 6 Sep 2021 17:32:34 +0200 +Subject: Fix/refactoring query_echappe_textes() qui ne detectait parfois pas + completement et correctement les chaines On robustifie la fonction avec + controle en amont et en aval, + en preferant ne rien faire si on a un doute plutot que de risquer de casser + la requete sql. On en profite pour rendre encore moins plausible la presence + des sequences d'echappement dans la chaine Et on modernise le code dans + query_reinjecte_textes() en utilisant un argument splat + +On modifie aussi l'usage dans req/mysql en privilegiant de garder la requete initiale intacte si il n'y a rien a faire dessus + +Origin: upstream, https://git.spip.net/spip/spip/commit/fca83dc95ee279552382eeb5015d5dc3efed9de3 +--- + ecrire/base/connect_sql.php | 47 ++++++++++++++++++++++++++++++++------------- + ecrire/req/mysql.php | 10 +++++----- + 2 files changed, 39 insertions(+), 18 deletions(-) + +Index: spip-3.1.4/ecrire/base/connect_sql.php +=================================================================== +--- spip-3.1.4.orig/ecrire/base/connect_sql.php ++++ spip-3.1.4/ecrire/base/connect_sql.php +@@ -426,10 +426,29 @@ function table_jointure($x, $y) { + * @param string $query + * @return array + */ +-function query_echappe_textes($query) { +- static $codeEchappements = array("''" => "\x1@##@\x1", "\'" => "\x2@##@\x2", "\\\"" => "\x3@##@\x3"); +- $query = str_replace(array_keys($codeEchappements), array_values($codeEchappements), $query); +- if (preg_match_all("/((['])[^']*(\\2))|(([\"])[^\"]*(\\5))/S", $query, $textes)) { ++function query_echappe_textes($query, $uniqid=null) { ++ static $codeEchappements = null; ++ if (is_null($codeEchappements)) { ++ if (is_null($uniqid)) { ++ $uniqid = uniqid(); ++ } ++ $uniqid = substr(md5($uniqid), 0, 4); ++ $codeEchappements = ["\\\\" => "\x1@#{$uniqid}#@\x1", "\\'" => "\x2@#{$uniqid}#@\x2", '\\"' => "\x3@#{$uniqid}#@\x3"]; ++ } ++ if ($query === null) { ++ return $codeEchappements; ++ } ++ ++ // si la query contient deja des codes d'echappement on va s'emmeler les pinceaux et donc on ne touche a rien ++ // ce n'est pas un cas legitime ++ foreach ($codeEchappements as $codeEchappement) { ++ if (strpos($query, $codeEchappement) !== false) { ++ return [$query, []]; ++ } ++ } ++ ++ $query_echappees = str_replace(array_keys($codeEchappements), array_values($codeEchappements), $query); ++ if (preg_match_all("/((['])[^']*(\\2))|(([\"])[^\"]*(\\5))/S", $query_echappees, $textes)) { + $textes = reset($textes); // indice 0 du match + switch (count($textes)) { + case 0: +@@ -456,12 +475,18 @@ function query_echappe_textes($query) { + $replace = explode(',', $replace); + break; + } +- $query = str_replace($textes, $replace, $query); ++ $query_echappees = str_replace($textes, $replace, $query_echappees); + } else { + $textes = array(); + } + +- return array($query, $textes); ++ // si il reste des quotes simples ou doubles, c'est qu'on s'est emmelles les pinceaux ++ // dans le doute on ne touche a rien ++ if (strpbrk($query_echappees, "'\"") !== false) { ++ return [$query, []]; ++ } ++ ++ return [$query_echappees, $textes]; + } + + /** +@@ -475,13 +500,9 @@ function query_echappe_textes($query) { + * @return string + */ + function query_reinjecte_textes($query, $textes) { +- static $codeEchappements = array("''" => "\x1@##@\x1", "\'" => "\x2@##@\x2", "\\\"" => "\x3@##@\x3"); +- # debug de la substitution +- #if (($c1=substr_count($query,"%"))!=($c2=count($textes))){ +- # spip_log("$c1 ::". $query,"tradquery"._LOG_ERREUR); +- # spip_log("$c2 ::". var_export($textes,1),"tradquery"._LOG_ERREUR); +- # spip_log("ini ::". $qi,"tradquery"._LOG_ERREUR); +- #} ++ // recuperer les codes echappements ++ $codeEchappements = query_echappe_textes(null); ++ + switch (count($textes)) { + case 0: + break; +Index: spip-3.1.4/ecrire/req/mysql.php +=================================================================== +--- spip-3.1.4.orig/ecrire/req/mysql.php ++++ spip-3.1.4/ecrire/req/mysql.php +@@ -538,12 +538,12 @@ function _mysql_traite_query($query, $db + // propager le prefixe en cas de requete imbriquee + // il faut alors echapper les chaine avant de le faire, pour ne pas risquer de + // modifier une requete qui est en fait juste du texte dans un champ +- if (stripos($suite, "SELECT") !== false) { +- list($suite, $textes) = query_echappe_textes($suite); +- if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite, $r)) { +- $suite = $r[1] . _mysql_traite_query($r[2], $db, $prefixe); ++ if (stripos($suite, 'SELECT') !== false) { ++ list($suite_echap, $textes) = query_echappe_textes($suite); ++ if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) { ++ $suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe); ++ $suite = query_reinjecte_textes($suite_echap, $textes); + } +- $suite = query_reinjecte_textes($suite, $textes); + } + } + $r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite; diff -Nru spip-3.1.4/debian/patches/0040-Simplifier-la-regexp-c-est-pas-plus-mal-cfreal.patch spip-3.1.4/debian/patches/0040-Simplifier-la-regexp-c-est-pas-plus-mal-cfreal.patch --- spip-3.1.4/debian/patches/0040-Simplifier-la-regexp-c-est-pas-plus-mal-cfreal.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0040-Simplifier-la-regexp-c-est-pas-plus-mal-cfreal.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,21 @@ +From: Cerdic +Date: Fri, 17 Sep 2021 17:39:04 +0200 +Subject: Simplifier la regexp, c'est pas plus mal (cfreal) + +--- + ecrire/base/connect_sql.php | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: spip-3.1.4/ecrire/base/connect_sql.php +=================================================================== +--- spip-3.1.4.orig/ecrire/base/connect_sql.php ++++ spip-3.1.4/ecrire/base/connect_sql.php +@@ -448,7 +448,7 @@ function query_echappe_textes($query, $u + } + + $query_echappees = str_replace(array_keys($codeEchappements), array_values($codeEchappements), $query); +- if (preg_match_all("/((['])[^']*(\\2))|(([\"])[^\"]*(\\5))/S", $query_echappees, $textes)) { ++ if (preg_match_all("/('[^']*')|(\"[^\"]*\")/S", $query_echappees, $textes)) { + $textes = reset($textes); // indice 0 du match + switch (count($textes)) { + case 0: diff -Nru spip-3.1.4/debian/patches/0041-Complement-de-413ca3cc58-_mysql_traite_query-s-appel.patch spip-3.1.4/debian/patches/0041-Complement-de-413ca3cc58-_mysql_traite_query-s-appel.patch --- spip-3.1.4/debian/patches/0041-Complement-de-413ca3cc58-_mysql_traite_query-s-appel.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0041-Complement-de-413ca3cc58-_mysql_traite_query-s-appel.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,53 @@ +From: Cerdic +Date: Mon, 27 Sep 2021 19:00:41 +0200 +Subject: Complement de 413ca3cc58 : _mysql_traite_query() s'appelle + recursivement, elle ne doit echapper les textes qu'au premier appel, + car ensuite ce n'est plus necessaire et elle risquerait potentiellement de + melanger les pourcents de substitutions/remplacement dans + query_reinjecte_textes() + +Origin: upstream, https://git.spip.net/spip/spip/commit/a4fdb3b8ec11f067a6d09512c6f31dbda7fd57c6 +--- + ecrire/req/mysql.php | 19 +++++++++++++++---- + 1 file changed, 15 insertions(+), 4 deletions(-) + +Index: spip-3.1.4/ecrire/req/mysql.php +=================================================================== +--- spip-3.1.4.orig/ecrire/req/mysql.php ++++ spip-3.1.4/ecrire/req/mysql.php +@@ -516,9 +516,10 @@ define('_SQL_PREFIXE_TABLE_MYSQL', '/([, + * @param string $query Requête à préparer + * @param string $db Nom de la base de donnée + * @param string $prefixe Préfixe de tables à appliquer ++ * @param bool $echappe_textes Pour ne pas essayer de re-echapper une chaine deja echappee qu'on traite en recursif + * @return string Requête préparée + */ +-function _mysql_traite_query($query, $db = '', $prefixe = '') { ++function _mysql_traite_query($query, $db = '', $prefixe = '', $echappe_textes = true) { + + if ($GLOBALS['mysql_rappel_nom_base'] and $db) { + $pref = '`' . $db . '`.'; +@@ -539,10 +540,20 @@ function _mysql_traite_query($query, $db + // il faut alors echapper les chaine avant de le faire, pour ne pas risquer de + // modifier une requete qui est en fait juste du texte dans un champ + if (stripos($suite, 'SELECT') !== false) { +- list($suite_echap, $textes) = query_echappe_textes($suite); ++ if ($echappe_textes) { ++ list($suite_echap, $textes) = query_echappe_textes($suite); ++ } ++ else { ++ $suite_echap = $suite; ++ } + if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) { +- $suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe); +- $suite = query_reinjecte_textes($suite_echap, $textes); ++ $suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false); ++ if ($echappe_textes) { ++ $suite = query_reinjecte_textes($suite_echap, $textes); ++ } ++ else { ++ $suite = $suite_echap; ++ } + } + } + } diff -Nru spip-3.1.4/debian/patches/0042-Balise-FORMULAIRE-nettoyer-du-code-mort-qui-ne-sert-.patch spip-3.1.4/debian/patches/0042-Balise-FORMULAIRE-nettoyer-du-code-mort-qui-ne-sert-.patch --- spip-3.1.4/debian/patches/0042-Balise-FORMULAIRE-nettoyer-du-code-mort-qui-ne-sert-.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0042-Balise-FORMULAIRE-nettoyer-du-code-mort-qui-ne-sert-.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,107 @@ +From: Cerdic +Date: Wed, 6 Oct 2021 14:38:15 +0200 +Subject: =?utf-8?q?Balise_=23FORMULAIRE_=3A_nettoyer_du_code_mort_qui_ne_se?= + =?utf-8?q?rt_plus=2C_ameliorer_la_securite_en_ajoutant_une_signature_des_a?= + =?utf-8?q?rguments_du_formulaire_d=C3=A8s_que_l=27auteur_identifi=C3=A9=2E?= + =?utf-8?q?_A_la_reception_on_refuse_un_formulaire_non_sign=C3=A9_si_on_a_u?= + =?utf-8?q?ne_session_ou_un_formulaire_sign=C3=A9_si_on_a_pas_de_session=2E?= + =?utf-8?q?_Si_on_a_une_session=2C_la_signature_doit_etre_identique=2E_En_a?= + =?utf-8?q?bsence_de_session_on_ne_signe_pas_les_arguments_du_formulaire_ca?= + =?utf-8?q?r_tout_le_monde_a_le_droit_de_l=27afficher=2C_et_ca_permet_de_ga?= + =?utf-8?q?rder_un_cache_identique_commun_a_tous_les_hits_anonymes_=28perf_?= + =?utf-8?q?issue=29?= + +Origin: upstream, https://git.spip.net/spip/spip/commit/fea5b5b4507cc9c0b9e91bbfbf34fe40b0bea805 +--- + ecrire/balise/formulaire_.php | 13 +++++++++++++ + ecrire/public/aiguiller.php | 23 ++++++++++++++++++++++- + ecrire/public/balises.php | 2 ++ + 3 files changed, 37 insertions(+), 1 deletion(-) + +Index: spip-3.1.4/ecrire/balise/formulaire_.php +=================================================================== +--- spip-3.1.4.orig/ecrire/balise/formulaire_.php ++++ spip-3.1.4/ecrire/balise/formulaire_.php +@@ -250,6 +250,11 @@ function balise_FORMULAIRE__contexte($fo + $action = parametre_url($action, 'formulaire_action_args', ''); + } + ++ /** ++ * @deprecated ++ * servait pour poster sur les actions de type editer_xxx() qui ne prenaient pas d'argument autrement que par _request('arg') et pour lesquelles il fallait donc passer un hash valide ++ */ ++ /* + if (isset($valeurs['_action'])) { + $securiser_action = charger_fonction('securiser_action', 'inc'); + $secu = $securiser_action(reset($valeurs['_action']), end($valeurs['_action']), '', -1); +@@ -257,6 +262,7 @@ function balise_FORMULAIRE__contexte($fo + "" + . ""; + } ++ */ + + // empiler la lang en tant que premier argument implicite du CVT + // pour permettre de la restaurer au moment du Verifier et du Traiter +@@ -267,6 +273,13 @@ function balise_FORMULAIRE__contexte($fo + $valeurs['action'] = $action; + $valeurs['form'] = $form; + ++ $valeurs['formulaire_sign'] = ''; ++ if (!empty($GLOBALS['visiteur_session']['id_auteur'])) { ++ $securiser_action = charger_fonction('securiser_action', 'inc'); ++ $secu = $securiser_action($valeurs['form'], $valeurs['formulaire_args'], '', -1); ++ $valeurs['formulaire_sign'] = $secu['hash']; ++ } ++ + if (!isset($valeurs['id'])) { + $valeurs['id'] = 'new'; + } +Index: spip-3.1.4/ecrire/public/aiguiller.php +=================================================================== +--- spip-3.1.4.orig/ecrire/public/aiguiller.php ++++ spip-3.1.4/ecrire/public/aiguiller.php +@@ -176,9 +176,30 @@ function traiter_formulaires_dynamiques( + return false; + } // le hit peut continuer normalement + ++ // verifier que le post est licite (du meme auteur ou d'une session anonyme) ++ $sign = _request('formulaire_action_sign'); ++ if (!empty($GLOBALS['visiteur_session']['id_auteur'])) { ++ if (empty($sign)) { ++ spip_log("signature ajax form incorrecte : $form (formulaire non signe mais on a une session)", 'formulaires' . _LOG_ERREUR); ++ return false; ++ } ++ $securiser_action = charger_fonction('securiser_action', 'inc'); ++ $secu = $securiser_action($form, $args, '', -1); ++ if ($sign !== $secu['hash']) { ++ spip_log("signature ajax form incorrecte : $form (formulaire signe mais ne correspond pas a la session)", 'formulaires' . _LOG_ERREUR); ++ return false; ++ } ++ } ++ else { ++ if (!is_null($sign)) { ++ spip_log("signature ajax form incorrecte : $form (formulaire signe mais pas de session)", 'formulaires' . _LOG_ERREUR); ++ return false; ++ } ++ } ++ + include_spip('inc/filtres'); + if (($args = decoder_contexte_ajax($args, $form)) === false) { +- spip_log("signature ajax form incorrecte : $form"); ++ spip_log("signature ajax form incorrecte : $form (encodage corrompu)", 'formulaires' . _LOG_ERREUR); + + return false; // continuons le hit comme si de rien etait + } else { +Index: spip-3.1.4/ecrire/public/balises.php +=================================================================== +--- spip-3.1.4.orig/ecrire/public/balises.php ++++ spip-3.1.4/ecrire/public/balises.php +@@ -2550,6 +2550,8 @@ function balise_ACTION_FORMULAIRE($p) { + value=\'' . $_form . '\' />' . + '' . ++ '' . + (!empty(\$Pile[0]['_hidden']) ? @\$Pile[0]['_hidden'] : '') . + ''"; + diff -Nru spip-3.1.4/debian/patches/0043-Nom-nom_site-et-bio-etant-des-champs-librement-modif.patch spip-3.1.4/debian/patches/0043-Nom-nom_site-et-bio-etant-des-champs-librement-modif.patch --- spip-3.1.4/debian/patches/0043-Nom-nom_site-et-bio-etant-des-champs-librement-modif.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0043-Nom-nom_site-et-bio-etant-des-champs-librement-modif.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,29 @@ +From: Cerdic +Date: Wed, 6 Oct 2021 17:37:53 +0200 +Subject: Nom, + nom_site et bio etant des champs librement modifiables par les utilisateurs, + on les protege comme des forums, + via safehtml L'impact perf est reduit ici car dans les listes d'auteur seul + le nom apparait, + lequel ne contient en general pas de < ce qui passe tres vite dans safehtml + +Origin: backport, https://git.spip.net/spip/spip/commit/361cc26080d1377bc55d2cb80736e5cfaf5fd242 +--- + ecrire/public/interfaces.php | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +Index: spip-3.1.4/ecrire/public/interfaces.php +=================================================================== +--- spip-3.1.4.orig/ecrire/public/interfaces.php ++++ spip-3.1.4/ecrire/public/interfaces.php +@@ -947,7 +947,9 @@ function declarer_interfaces() { + define('_TRAITEMENT_RACCOURCIS', 'propre(%s, $connect, $Pile[0])'); + define('_TRAITEMENT_TYPO_SANS_NUMERO', 'typo(supprimer_numero(%s), "TYPO", $connect, $Pile[0])'); + +- $GLOBALS['table_des_traitements']['BIO'][] = _TRAITEMENT_RACCOURCIS; ++ $GLOBALS['table_des_traitements']['BIO'][] = 'safehtml('._TRAITEMENT_RACCOURCIS.')'; ++ $GLOBALS['table_des_traitements']['NOM_SITE']['spip_auteurs'] = 'entites_html(%s)'; ++ $GLOBALS['table_des_traitements']['NOM']['spip_auteurs'] = 'safehtml(%s)'; + $GLOBALS['table_des_traitements']['CHAPO'][] = _TRAITEMENT_RACCOURCIS; + $GLOBALS['table_des_traitements']['DATE'][] = 'normaliser_date(%s)'; + $GLOBALS['table_des_traitements']['DATE_REDAC'][] = 'normaliser_date(%s)'; diff -Nru spip-3.1.4/debian/patches/0044-Lors-de-l-upload-de-documents-gerer-le-cas-des-fichi.patch spip-3.1.4/debian/patches/0044-Lors-de-l-upload-de-documents-gerer-le-cas-des-fichi.patch --- spip-3.1.4/debian/patches/0044-Lors-de-l-upload-de-documents-gerer-le-cas-des-fichi.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0044-Lors-de-l-upload-de-documents-gerer-le-cas-des-fichi.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,36 @@ +From: Cerdic +Date: Thu, 21 Oct 2021 15:22:13 +0200 +Subject: Lors de l'upload de documents, + gerer le cas des fichiers avec multiples extensions : on ne laisse que + celles qui sont autorisees a l'upload si possible, + sinon on ne garde que la derniere + +Origin: upstream, https://git.spip.net/spip/spip/commit/28c2cd60bee60892c6660b81d98cc166aa442866 +--- + ecrire/inc/documents.php | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +Index: spip-3.1.4/ecrire/inc/documents.php +=================================================================== +--- spip-3.1.4.orig/ecrire/inc/documents.php ++++ spip-3.1.4/ecrire/inc/documents.php +@@ -139,6 +139,19 @@ function copier_document($ext, $orig, $s + // pour les images transformees par rotation (action/documenter) + $dest = preg_replace(',-r(90|180|270)$,', '', $dest); + ++ while (preg_match(",\.(\w+)$,", $dest, $m)) { ++ if (!function_exists('verifier_upload_autorise') ++ or !$r = verifier_upload_autorise($dest) ++ or $r['autozip']) { ++ $dest = substr($dest, 0, -strlen($m[0])) . '_' . $m[1]; ++ break; ++ } ++ else { ++ $dest = substr($dest, 0, -strlen($m[0])); ++ $ext = $m[1] . "." . $ext; ++ } ++ } ++ + // Si le document "source" est deja au bon endroit, ne rien faire + if ($source == ($dir . $dest . '.' . $ext)) { + return $source; diff -Nru spip-3.1.4/debian/patches/0045-Oups-erreur-dans-1b8e4f404-il-faut-utiliser-empty-ca.patch spip-3.1.4/debian/patches/0045-Oups-erreur-dans-1b8e4f404-il-faut-utiliser-empty-ca.patch --- spip-3.1.4/debian/patches/0045-Oups-erreur-dans-1b8e4f404-il-faut-utiliser-empty-ca.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0045-Oups-erreur-dans-1b8e4f404-il-faut-utiliser-empty-ca.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,25 @@ +From: Cerdic +Date: Thu, 21 Oct 2021 17:33:56 +0200 +Subject: Oups, + erreur dans 1b8e4f404 il faut utiliser empty car on poste potentiellement + une signature vide (empechait de se loger et sans doute de poster sur tout + formulaire anonyme) + +Origin: upstream, https://git.spip.net/spip/spip/commit/2992190368197a0f966e85d6c5751b999be83cb4ZZ +--- + ecrire/public/aiguiller.php | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: spip-3.1.4/ecrire/public/aiguiller.php +=================================================================== +--- spip-3.1.4.orig/ecrire/public/aiguiller.php ++++ spip-3.1.4/ecrire/public/aiguiller.php +@@ -191,7 +191,7 @@ function traiter_formulaires_dynamiques( + } + } + else { +- if (!is_null($sign)) { ++ if (!empty($sign)) { + spip_log("signature ajax form incorrecte : $form (formulaire signe mais pas de session)", 'formulaires' . _LOG_ERREUR); + return false; + } diff -Nru spip-3.1.4/debian/patches/0046-Il-faut-incrementer-spip_version_code-car-tous-les-f.patch spip-3.1.4/debian/patches/0046-Il-faut-incrementer-spip_version_code-car-tous-les-f.patch --- spip-3.1.4/debian/patches/0046-Il-faut-incrementer-spip_version_code-car-tous-les-f.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0046-Il-faut-incrementer-spip_version_code-car-tous-les-f.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,25 @@ +From: Cerdic +Date: Thu, 21 Oct 2021 11:14:18 +0200 +Subject: Il faut incrementer spip_version_code car tous les formulaires + doivent etre recalcules + +Origin: upstream, https://git.spip.net/spip/spip/commit/aefb90d6a186f81c2596dc39a010a5827921b6c1 +--- + ecrire/inc_version.php | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: spip-3.1.4/ecrire/inc_version.php +=================================================================== +--- spip-3.1.4.orig/ecrire/inc_version.php ++++ spip-3.1.4/ecrire/inc_version.php +@@ -375,8 +375,8 @@ $liste_des_authentifications = array( + // ex : 2.0.0, 2.0.0-dev, 2.0.0-beta, 2.0.0-beta2 + $spip_version_branche = "3.1.4"; + // version des signatures de fonctions PHP +-// (= numero SVN de leur derniere modif cassant la compatibilite et/ou necessitant un recalcul des squelettes) +-$spip_version_code = 22653; ++// (= date de leur derniere modif cassant la compatibilite et/ou necessitant un recalcul des squelettes) ++$spip_version_code = 20211021; + // version de la base SQL (= numero SVN de sa derniere modif) + $spip_version_base = 21742; + diff -Nru spip-3.1.4/debian/patches/0047-Le-plugin-mots-et-son-formulaire-editer_mot-contient.patch spip-3.1.4/debian/patches/0047-Le-plugin-mots-et-son-formulaire-editer_mot-contient.patch --- spip-3.1.4/debian/patches/0047-Le-plugin-mots-et-son-formulaire-editer_mot-contient.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0047-Le-plugin-mots-et-son-formulaire-editer_mot-contient.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,35 @@ +From: Cerdic +Date: Wed, 3 Nov 2021 16:13:13 +0100 +Subject: Le plugin mots et son formulaire editer_mot() contient encore du + vieux code pas reformate, reactivons donc cette feature en 3.2, + c'etait casse gueule de changer ca sur cette branche + +Origin: upstream, https://git.spip.net/spip/spip/commit/685a2c0bdcde2ef1804b4ac794243b54c4a22585 +--- + ecrire/balise/formulaire_.php | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +Index: spip-3.1.4/ecrire/balise/formulaire_.php +=================================================================== +--- spip-3.1.4.orig/ecrire/balise/formulaire_.php ++++ spip-3.1.4/ecrire/balise/formulaire_.php +@@ -251,10 +251,8 @@ function balise_FORMULAIRE__contexte($fo + } + + /** +- * @deprecated +- * servait pour poster sur les actions de type editer_xxx() qui ne prenaient pas d'argument autrement que par _request('arg') et pour lesquelles il fallait donc passer un hash valide ++ * sert (encore :() pour poster sur les actions de type editer_xxx() qui ne prenaient pas d'argument autrement que par _request('arg') et pour lesquelles il fallait donc passer un hash valide + */ +- /* + if (isset($valeurs['_action'])) { + $securiser_action = charger_fonction('securiser_action', 'inc'); + $secu = $securiser_action(reset($valeurs['_action']), end($valeurs['_action']), '', -1); +@@ -262,7 +260,6 @@ function balise_FORMULAIRE__contexte($fo + "" + . ""; + } +- */ + + // empiler la lang en tant que premier argument implicite du CVT + // pour permettre de la restaurer au moment du Verifier et du Traiter diff -Nru spip-3.1.4/debian/patches/0048-Ameliorer-valider_url_distante-on-utilise-filter_var.patch spip-3.1.4/debian/patches/0048-Ameliorer-valider_url_distante-on-utilise-filter_var.patch --- spip-3.1.4/debian/patches/0048-Ameliorer-valider_url_distante-on-utilise-filter_var.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0048-Ameliorer-valider_url_distante-on-utilise-filter_var.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,121 @@ +Origin: spip-3.2.12/ecrire/inc/distant.php +Reviewed-by: Sylvain Beucler +Last-Update: 2021-12-28 + +Copied full function body as of 3.2.12 (since we couldn't patch a +missing function). + +Index: spip-3.1.4/ecrire/inc/distant.php +=================================================================== +--- spip-3.1.4.orig/ecrire/inc/distant.php ++++ spip-3.1.4/ecrire/inc/distant.php +@@ -137,6 +137,109 @@ function copie_locale($source, $mode = ' + } + + /** ++ * Valider qu'une URL d'un document distant est bien distante ++ * et pas une url localhost qui permet d'avoir des infos sur le serveur ++ * inspiree de https://core.trac.wordpress.org/browser/trunk/src/wp-includes/http.php?rev=36435#L500 ++ * ++ * @param string $url ++ * @param array $known_hosts ++ * url/hosts externes connus et acceptes ++ * @return false|string ++ * url ou false en cas d'echec ++ */ ++function valider_url_distante($url, $known_hosts = array()) { ++ if (!function_exists('protocole_verifier')){ ++ include_spip('inc/filtres_mini'); ++ } ++ ++ if (!protocole_verifier($url, array('http', 'https'))) { ++ return false; ++ } ++ ++ $parsed_url = parse_url($url); ++ if (!$parsed_url or empty($parsed_url['host']) ) { ++ return false; ++ } ++ ++ if (isset($parsed_url['user']) or isset($parsed_url['pass'])) { ++ return false; ++ } ++ ++ if (false !== strpbrk($parsed_url['host'], ':#?[]')) { ++ return false; ++ } ++ ++ if (!is_array($known_hosts)) { ++ $known_hosts = array($known_hosts); ++ } ++ $known_hosts[] = $GLOBALS['meta']['adresse_site']; ++ $known_hosts[] = url_de_base(); ++ $known_hosts = pipeline('declarer_hosts_distants', $known_hosts); ++ ++ $is_known_host = false; ++ foreach ($known_hosts as $known_host) { ++ $parse_known = parse_url($known_host); ++ if ($parse_known ++ and strtolower($parse_known['host']) === strtolower($parsed_url['host'])) { ++ $is_known_host = true; ++ break; ++ } ++ } ++ ++ if (!$is_known_host) { ++ $host = trim($parsed_url['host'], '.'); ++ if (! $ip = filter_var($host, FILTER_VALIDATE_IP)) { ++ $ip = gethostbyname($host); ++ if ($ip === $host) { ++ // Error condition for gethostbyname() ++ $ip = false; ++ } ++ if ($records = dns_get_record($host)) { ++ foreach ($records as $record) { ++ // il faut que le TTL soit suffisant afin d'etre certain que le copie_locale eventuel qui suit ++ // se fasse sur la meme IP ++ if ($record['ttl']<10) { ++ $ip = false; ++ break; ++ } ++ } ++ } ++ else { ++ $ip = false; ++ } ++ } ++ if ($ip) { ++ if (! filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { ++ return false; ++ } ++ } ++ } ++ ++ if (empty($parsed_url['port'])) { ++ return $url; ++ } ++ ++ $port = $parsed_url['port']; ++ if ($port === 80 or $port === 443 or $port === 8080) { ++ return $url; ++ } ++ ++ if ($is_known_host) { ++ foreach ($known_hosts as $known_host) { ++ $parse_known = parse_url($known_host); ++ if ($parse_known ++ and !empty($parse_known['port']) ++ and strtolower($parse_known['host']) === strtolower($parsed_url['host']) ++ and $parse_known['port'] == $port) { ++ return $url; ++ } ++ } ++ } ++ ++ return false; ++} ++ ++/** + * Preparer les donnes pour un POST + * si $donnees est une chaine + * - charge a l'envoyeur de la boundariser, de gerer le Content-Type etc... diff -Nru spip-3.1.4/debian/patches/0049-Verifier-qu-on-a-bien-le-droit-de-modifier-le-login-.patch spip-3.1.4/debian/patches/0049-Verifier-qu-on-a-bien-le-droit-de-modifier-le-login-.patch --- spip-3.1.4/debian/patches/0049-Verifier-qu-on-a-bien-le-droit-de-modifier-le-login-.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0049-Verifier-qu-on-a-bien-le-droit-de-modifier-le-login-.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,64 @@ +From: Cerdic +Date: Wed, 2 Feb 2022 09:51:56 +0100 +Subject: Verifier qu'on a bien le droit de modifier le login avant d'accepter + un post sur cette variable + +Origin: upstream, https://git.spip.net/spip/spip/commit/9ed1818f14be283b0b6e8469bfbc54ba2d10763b +--- + prive/formulaires/editer_auteur.php | 42 ++++++++++++++++++++++++++----------- + 1 file changed, 30 insertions(+), 12 deletions(-) + +diff --git a/prive/formulaires/editer_auteur.php b/prive/formulaires/editer_auteur.php +index bd4efd2..3b7ac39 100644 +--- a/prive/formulaires/editer_auteur.php ++++ b/prive/formulaires/editer_auteur.php +@@ -236,19 +236,37 @@ function formulaires_editer_auteur_verifier_dist( + } + + $erreurs['message_erreur'] = ''; ++ if (_request('login')) { ++ // on n'est jamais cense poster le name login ++ $erreurs['login'] = _T('info_non_modifiable'); ++ } ++ elseif ( ++ ($login = _request('new_login')) and ++ $login !== sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)) ++ ) { ++ // on verifie la meme chose que dans auteurs_edit_config() ++ if ( ++ ! auth_autoriser_modifier_login($auth_methode) ++ or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['email' => true]) ++ ) { ++ $erreurs['login'] = _T('info_non_modifiable'); ++ } ++ } + +- if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)) { +- $erreurs['new_login'] = $err; +- $erreurs['message_erreur'] .= $err; +- } else { +- // pass trop court ou confirmation non identique +- if ($p = _request('new_pass')) { +- if ($p != _request('new_pass2')) { +- $erreurs['new_pass'] = _T('info_passes_identiques'); +- $erreurs['message_erreur'] .= _T('info_passes_identiques'); +- } elseif ($err = auth_verifier_pass($auth_methode, _request('new_login'), $p, $id_auteur)) { +- $erreurs['new_pass'] = $err; +- $erreurs['message_erreur'] .= $err; ++ if (empty($erreurs['login'])){ ++ if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)){ ++ $erreurs['new_login'] = $err; ++ $erreurs['message_erreur'] .= $err; ++ } else { ++ // pass trop court ou confirmation non identique ++ if ($p = _request('new_pass')){ ++ if ($p!=_request('new_pass2')){ ++ $erreurs['new_pass'] = _T('info_passes_identiques'); ++ $erreurs['message_erreur'] .= _T('info_passes_identiques'); ++ } elseif ($err = auth_verifier_pass($auth_methode, _request('new_login'), $p, $id_auteur)) { ++ $erreurs['new_pass'] = $err; ++ $erreurs['message_erreur'] .= $err; ++ } + } + } + } diff -Nru spip-3.1.4/debian/patches/0050-appliquer-rawurlencode-aussi-sur-les-tableaux-qu-on-.patch spip-3.1.4/debian/patches/0050-appliquer-rawurlencode-aussi-sur-les-tableaux-qu-on-.patch --- spip-3.1.4/debian/patches/0050-appliquer-rawurlencode-aussi-sur-les-tableaux-qu-on-.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0050-appliquer-rawurlencode-aussi-sur-les-tableaux-qu-on-.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,23 @@ +From: Cerdic +Date: Wed, 29 Dec 2021 10:50:27 +0100 +Subject: appliquer rawurlencode() aussi sur les tableaux qu'on passe en + argument de parametre_url() #4819 + +Origin: upstream, https://git.spip.net/spip/spip/commit/b2f8e3a59ccbf958197e22609938871884438b5f +--- + ecrire/inc/utils.php | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php +index 40f892e..9fc3ee3 100644 +--- a/ecrire/inc/utils.php ++++ b/ecrire/inc/utils.php +@@ -600,7 +600,7 @@ function parametre_url($url, $c, $v = null, $sep = '&') { + } else { + $id = (substr($k, -2) == '[]') ? $k : ($k . "[]"); + foreach ($v as $w) { +- $url[] = $id . '=' . (is_array($w) ? 'Array' : $w); ++ $url[] = $id . '=' . (is_array($w) ? 'Array' : rawurlencode($w)); + } + } + } diff -Nru spip-3.1.4/debian/patches/0051-D-pr-cier-et-s-curiser-l-insertion-d-une-galerie-dan.patch spip-3.1.4/debian/patches/0051-D-pr-cier-et-s-curiser-l-insertion-d-une-galerie-dan.patch --- spip-3.1.4/debian/patches/0051-D-pr-cier-et-s-curiser-l-insertion-d-une-galerie-dan.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/0051-D-pr-cier-et-s-curiser-l-insertion-d-une-galerie-dan.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,91 @@ +From: Matthieu Marcillaud +Date: Tue, 22 Feb 2022 16:09:11 +0100 +Subject: =?utf-8?q?D=C3=A9pr=C3=A9cier_et_s=C3=A9curiser_l=E2=80=99insertio?= + =?utf-8?q?n_d=E2=80=99une_galerie_dans_le_formulaires_d=E2=80=99ajout_de_d?= + =?utf-8?q?ocument=2E_Ce_mode_n=E2=80=99est_plus_utilis=C3=A9_dans_SPIP_dep?= + =?utf-8?q?uis_SPIP_3=2E0=2E?= +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +Il faut déclarer les fichiers autorisés dans la globale (hum) +medias_deprecated_liste_galeries + +(cherry picked from commit 483c11bd45cd22dfff0a94b94523e8a82c3ca4ca) + +Origin: upstream, https://git.spip.net/spip/medias/commit/3014b845da2dd8ad15ff04b50fd9dbba388a9ca2 +--- + .../medias/formulaires/joindre_document.html | 5 +++-- + .../medias/formulaires/joindre_document.php | 21 ++++++++++++++++++++- + 2 files changed, 23 insertions(+), 3 deletions(-) + +--- a/plugins-dist/medias/formulaires/joindre_document.html ++++ b/plugins-dist/medias/formulaires/joindre_document.html +@@ -19,6 +19,7 @@ + + + ] +-[(#ENV{_galerie,''}|oui) +- [(#INCLURE{fond=#ENV{_galerie}|spip_sanitize_from_request{_galerie,vide}, env, ajax})] ++[(#REM) @deprecated 4.0 - SPIP 4.1 ] ++[(#ENV{_galerie,''}|joindre_document_galerie_valide|oui) ++ [(#INCLURE{fond=#ENV{_galerie}, env, ajax})] + ] +--- a/plugins-dist/medias/formulaires/joindre_document.php ++++ b/plugins-dist/medias/formulaires/joindre_document.php +@@ -48,6 +48,21 @@ function joindre_determiner_mode($mode, + } + + /** ++ * Indique si une galerie demandée est valide ++ * ++ * @deprecated 4.0 (SPIP 4.1) L’inclusion de galerie est déprécié (non utilisé depuis SPIP 3.0). Préferez ajax_reload() après upload. ++ * @global array medias_deprecated_liste_galeries Liste de chemins de fichiers depuis la racine SPIP autorisés. ++ * @param string|null $galerie Le fichier de galerie désiré ++ */ ++function joindre_document_galerie_valide(string $galerie): bool { ++ $galeries = []; ++ if (isset($GLOBALS['medias_deprecated_liste_galeries']) and is_array($GLOBALS['medias_deprecated_liste_galeries'])) { ++ $galeries = $GLOBALS['medias_deprecated_liste_galeries']; ++ } ++ return in_array($galerie, $galeries); ++} ++ ++/** + * Chargement du formulaire + * + * @param int|string $id_document +@@ -59,6 +74,7 @@ function joindre_determiner_mode($mode, + * @param string $mode + * Le mode du document (auto,choix,document,image,vignette...), par défaut auto + * @param string $galerie ++ * Deprecated 4.0 (SPIP 4.1) + * Passer optionnellement une galerie jointe au form, plus utilise nativement, + * on prefere la mise a jour apres upload par ajaxReload('documents') + * @param bool|string $proposer_media +@@ -121,7 +137,8 @@ function formulaires_joindre_document_ch + // On ne propose le FTP que si on a des choses a afficher + $valeurs['proposer_ftp'] = ($valeurs['_options_upload_ftp'] or $valeurs['_dir_upload_ftp']); + +- if ($galerie) { ++ /** @deprecated 4.0 (SPIP 4.1). Utiliser ajaxReload('documents') après upload */ ++ if ($galerie and joindre_document_galerie_valide($galerie)) { + # passer optionnellement une galerie jointe au form + # plus utilise nativement, on prefere la mise a jour + # apres upload par ajaxReload('documents') +@@ -152,6 +169,7 @@ function formulaires_joindre_document_ch + * @param string $mode + * Le mode du document (auto,choix,document,image,vignette...), par défaut auto + * @param string $galerie ++ * Deprecated 4.0 (SPIP 4.1) + * Passer optionnellement une galerie jointe au form, plus utilise nativement, + * on prefere la mise a jour apres upload par ajaxReload('documents') + * @param bool|string $proposer_media +@@ -244,6 +262,7 @@ function formulaires_joindre_document_ve + * @param string $mode + * Le mode du document (auto,choix,document,image,vignette...), par défaut auto + * @param string $galerie ++ * Deprecated 4.0 (SPIP 4.1) + * Passer optionnellement une galerie jointe au form, plus utilise nativement, + * on prefere la mise a jour apres upload par ajaxReload('documents') + * @param bool|string $proposer_media diff -Nru spip-3.1.4/debian/patches/CVE-2020-28984.patch spip-3.1.4/debian/patches/CVE-2020-28984.patch --- spip-3.1.4/debian/patches/CVE-2020-28984.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/CVE-2020-28984.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,60 @@ +From ae4267eba1022dabc12831ddb021c5d6e09040f8 Mon Sep 17 00:00:00 2001 +From: Cerdic +Date: Fri, 5 Jun 2020 10:37:01 +0200 +Subject: [PATCH] n'enregistrer que les preferences licites (g0uZ) + +[Backported by Abhijith PA ] + +--- + prive/formulaires/configurer_preferences.php | 20 +++++++++++++------- + 1 file changed, 13 insertions(+), 7 deletions(-) + +Index: spip-3.1.4/prive/formulaires/configurer_preferences.php +=================================================================== +--- spip-3.1.4.orig/prive/formulaires/configurer_preferences.php ++++ spip-3.1.4/prive/formulaires/configurer_preferences.php +@@ -74,16 +74,21 @@ function formulaires_configurer_preferen + } + + if ($couleur = _request('couleur')) { +- $GLOBALS['visiteur_session']['prefs']['couleur'] = $couleur; ++ $couleurs = charger_fonction('couleurs', 'inc'); ++ $les_couleurs = $couleurs(array(), true); ++ if (isset($les_couleurs[$couleur])) { ++ $GLOBALS['visiteur_session']['prefs']['couleur'] = $couleur; ++ } + } +- if ($display = _request('display')) { ++ if ($display = intval(_request('display'))) { + $GLOBALS['visiteur_session']['prefs']['display'] = $display; + } +- if ($display_navigation = _request('display_navigation')) { ++ if ($display_navigation = _request('display_navigation') ++ and in_array($display_navigation, ['navigation_sans_icone', 'navigation_avec_icones'])) { + $GLOBALS['visiteur_session']['prefs']['display_navigation'] = $display_navigation; + } + if (!is_null($display_outils = _request('display_outils'))) { +- $GLOBALS['visiteur_session']['prefs']['display_outils'] = $display_outils; ++ $GLOBALS['visiteur_session']['prefs']['display_outils'] = ($display_outils ? 'oui' : ''); + } + + if ($menudev = _request('activer_menudev')) { +@@ -94,14 +99,15 @@ function formulaires_configurer_preferen + include_spip('action/editer_auteur'); + $c = array('prefs' => serialize($GLOBALS['visiteur_session']['prefs'])); + +- if (_request('imessage')) { +- $c['imessage'] = _request('imessage'); ++ if ($imessage = _request('imessage') and in_array($imessage, ['oui', 'non'])) { ++ $c['imessage'] = $imessage; + } + + auteur_modifier($GLOBALS['visiteur_session']['id_auteur'], $c); + } + +- if ($spip_ecran = _request('spip_ecran')) { ++ if ($spip_ecran = _request('spip_ecran') ++ and in_array($spip_ecran, ['etroit', 'large'])) { + // Poser un cookie, + // car ce reglage depend plus du navigateur que de l'utilisateur + $GLOBALS['spip_ecran'] = $spip_ecran; diff -Nru spip-3.1.4/debian/patches/series spip-3.1.4/debian/patches/series --- spip-3.1.4/debian/patches/series 2019-09-16 23:02:26.000000000 +0100 +++ spip-3.1.4/debian/patches/series 2022-05-31 20:32:23.000000000 +0100 @@ -30,3 +30,35 @@ 0030-centraliser-les-tests-identiques-c-est-plus-simple-a.patch 0031-oubli-d-une-accolade-fermante-dans-r24401-pierrox.patch 0032-Mise-a-jour-de-l-ecran-de-securite.patch +CVE-2020-28984.patch +0022-Utilisation-des-fonctions-de-sanitization-sur-galeri.patch +0023-attribut_html-sur-les-attributs-renvoy-s-par-env_to_.patch +0024-TEMP-0000000-803658-part-2.patch +0025-une-fonction-pour-detecter-qu-un-formulaire-a-ete-in.patch +0026-Utiliser-contexte_compil-pour-reperer-les-appels-a-e.patch +0027-on-accepte-pas-une-fonction-de-config-inconnue-si-el.patch +0028-Eviter-de-donner-sa-langue-au-chat.patch +0029-Eviter-d-utiliser-une-globale-gerer-le-flag-en-stati.patch +TEMP-0000000-803658-30.patch +0031-verifier-l-autorisation-de-modifier-le-site-passe-en.patch +0032-Verifier-les-autorisations-de-modifier-les-mots-grou.patch +0033-Verifier-l-autorisation-de-modifier-les-documents-pa.patch +TEMP-000000-803658_34.patch +0035-ne-pas-stocker-le-champ-ldap_password-dans-les-fichi.patch +0036-nettoyer-l-adresse-site-qu-on-enregistre-fix-4629.patch +0037-4625-echapper-les-valeurs-injectees-dans-le-js-via-l.patch + +0038-Utiliser-valider_url_distante-en-plus-de-tester_url_.patch +0039-Fix-refactoring-query_echappe_textes-qui-ne-detectai.patch +0040-Simplifier-la-regexp-c-est-pas-plus-mal-cfreal.patch +0041-Complement-de-413ca3cc58-_mysql_traite_query-s-appel.patch +0042-Balise-FORMULAIRE-nettoyer-du-code-mort-qui-ne-sert-.patch +0043-Nom-nom_site-et-bio-etant-des-champs-librement-modif.patch +0044-Lors-de-l-upload-de-documents-gerer-le-cas-des-fichi.patch +0045-Oups-erreur-dans-1b8e4f404-il-faut-utiliser-empty-ca.patch +0046-Il-faut-incrementer-spip_version_code-car-tous-les-f.patch +0047-Le-plugin-mots-et-son-formulaire-editer_mot-contient.patch +0048-Ameliorer-valider_url_distante-on-utilise-filter_var.patch +0049-Verifier-qu-on-a-bien-le-droit-de-modifier-le-login-.patch +0050-appliquer-rawurlencode-aussi-sur-les-tableaux-qu-on-.patch +0051-D-pr-cier-et-s-curiser-l-insertion-d-une-galerie-dan.patch diff -Nru spip-3.1.4/debian/patches/TEMP-0000000-803658-30.patch spip-3.1.4/debian/patches/TEMP-0000000-803658-30.patch --- spip-3.1.4/debian/patches/TEMP-0000000-803658-30.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/TEMP-0000000-803658-30.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,43 @@ +Description: + 0030-appels-a-autoriser-sur-les-formulaires-editer-a-mini.patch + +Index: spip-3.1.4/prive/formulaires/editer_article.php +=================================================================== +--- spip-3.1.4.orig/prive/formulaires/editer_article.php ++++ spip-3.1.4/prive/formulaires/editer_article.php +@@ -56,6 +56,13 @@ function formulaires_editer_article_char + ) { + $valeurs = formulaires_editer_objet_charger('article', $id_article, $id_rubrique, $lier_trad, $retour, $config_fonc, + $row, $hidden); ++ ++ if (test_formulaire_inclus_par_modele()) { ++ if (intval($id_article) and !autoriser('modifier', 'article', intval($id_article))) { ++ $valeurs['editable'] = ''; ++ } ++ } ++ + // il faut enlever l'id_rubrique car la saisie se fait sur id_parent + // et id_rubrique peut etre passe dans l'url comme rubrique parent initiale + // et sera perdue si elle est supposee saisie +Index: spip-3.1.4/prive/formulaires/editer_rubrique.php +=================================================================== +--- spip-3.1.4.orig/prive/formulaires/editer_rubrique.php ++++ spip-3.1.4/prive/formulaires/editer_rubrique.php +@@ -55,8 +55,16 @@ function formulaires_editer_rubrique_cha + $row = array(), + $hidden = '' + ) { +- return formulaires_editer_objet_charger('rubrique', $id_rubrique, $id_parent, $lier_trad, $retour, $config_fonc, $row, ++ $valeurs = formulaires_editer_objet_charger('rubrique', $id_rubrique, $id_parent, $lier_trad, $retour, $config_fonc, $row, + $hidden); ++ ++ if (test_formulaire_inclus_par_modele()){ ++ if (intval($id_rubrique) and !autoriser('modifier', 'rubrique', intval($id_rubrique))){ ++ $valeurs['editable'] = ''; ++ } ++ } ++ ++ return $valeurs; + } + + /** diff -Nru spip-3.1.4/debian/patches/TEMP-000000-803658_34.patch spip-3.1.4/debian/patches/TEMP-000000-803658_34.patch --- spip-3.1.4/debian/patches/TEMP-000000-803658_34.patch 1970-01-01 01:00:00.000000000 +0100 +++ spip-3.1.4/debian/patches/TEMP-000000-803658_34.patch 2022-05-31 20:32:23.000000000 +0100 @@ -0,0 +1,19 @@ +Description: + 0034-verifier-l-autorisation-de-modifier-la-breve-passe-e.patch + +--- spip-3.1.4.orig/plugins-dist/breves/formulaires/editer_breve.php ++++ spip-3.1.4/plugins-dist/breves/formulaires/editer_breve.php +@@ -55,6 +55,13 @@ function formulaires_editer_breve_charge + ) { + $valeurs = formulaires_editer_objet_charger('breve', $id_breve, $id_rubrique, $lier_trad, $retour, $config_fonc, $row, + $hidden); ++ ++ if (test_formulaire_inclus_par_modele()) { ++ if (intval($id_breve) and !autoriser('modifier', 'breve', intval($id_breve))) { ++ $valeurs['editable'] = ''; ++ } ++ } ++ + // un bug a permis a un moment que des breves soient dans des sous rubriques + // lorsque ce cas se presente, il faut relocaliser la breve dans son secteur, plutot que n'importe ou + if ($valeurs['id_parent']) {