From 24fa887d0d7885194cea27d71efa64c6476b5ccd Mon Sep 17 00:00:00 2001
From: Matthieu Marcillaud <marcimat@rezo.net>
Date: Sat, 22 Jan 2022 12:10:46 +0100
Subject: [PATCH] =?UTF-8?q?Tol=C3=A9rance=20finalement=20sur=20le=20typage?=
 =?UTF-8?q?=20du=20premier=20param=C3=A8tre=20(int=20$id,=20int=20$id=5Fob?=
 =?UTF-8?q?jet)=20des=20nouvelles=20fonctions=20d=E2=80=99URL,=20car=20il?=
 =?UTF-8?q?=20y=20a=20des=20appels=20avec=20""=20ou=20"new"=20ou=20null,?=
 =?UTF-8?q?=20qui=20ne=20peuvent=20=C3=AAtre=20transform=C3=A9s=20en=20int?=
 =?UTF-8?q?=20par=20PHP=20de=20la=20sorte.=20On=20enl=C3=A8ve=20le=20type,?=
 =?UTF-8?q?=20et=20on=20applique=20intval=20dessus=20dans=20la=20foul?=
 =?UTF-8?q?=C3=A9e.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc/filtres.php |  6 +++---
 ecrire/inc/urls.php    |  5 +++--
 ecrire/inc/utils.php   | 19 +++++++++++--------
 3 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index ac6cc65bb9..6d7fa72ae3 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -4685,7 +4685,7 @@ function bouton_action($libelle, $url, $class = '', $confirm = '', $title = '',
  * $ligne correspond a la ligne SQL de tous les champs de l'objet, les fonctions
  * de personnalisation n'ont donc pas a refaire de requete.
  *
- * @param int $id_objet
+ * @param int|string|null $id_objet
  * @param string $type_objet
  * @param string $info
  * @param string $etoile
@@ -4693,7 +4693,7 @@ function bouton_action($libelle, $url, $class = '', $confirm = '', $title = '',
  *     Tableau de paramètres supplémentaires transmis aux fonctions generer_xxx
  * @return string
  */
-function generer_objet_info(int $id_objet, string $type_objet, string $info, string $etoile = '', array $params = []): string {
+function generer_objet_info($id_objet, string $type_objet, string $info, string $etoile = '', array $params = []): string {
 	static $trouver_table = null;
 	static $objets;
 
@@ -4925,7 +4925,7 @@ function appliquer_traitement_champ($texte, $champ, $table_objet = '', $env = []
  * Generer un lien (titre clicable vers url) vers un objet
  *
  * @param int $id_objet
- * @param $objet
+ * @param string $objet
  * @param int $longueur
  * @param null|string $connect
  * @return string
diff --git a/ecrire/inc/urls.php b/ecrire/inc/urls.php
index 6ab3fb4d02..f4c1085c11 100644
--- a/ecrire/inc/urls.php
+++ b/ecrire/inc/urls.php
@@ -301,7 +301,7 @@ function nettoyer_url_page($url, $contexte = []) {
  * L'URL est calculée en fonction de son état publié ou non,
  * calculé à partir de la déclaration de statut.
  *
- * @param int $id Identifiant de l'objet
+ * @param int|string|null $id Identifiant de l'objet
  * @param string $objet Type d'objet
  * @param string $args
  * @param string $ancre
@@ -309,8 +309,9 @@ function nettoyer_url_page($url, $contexte = []) {
  * @param string $connect
  * @return string
  */
-function generer_objet_url_ecrire(int $id, string $objet, string $args = '', string $ancre = '', ?bool $public = null, string $connect = ''): string {
+function generer_objet_url_ecrire($id, string $objet, string $args = '', string $ancre = '', ?bool $public = null, string $connect = ''): string {
 	static $furls = [];
+	$id = intval($id);
 	if (!isset($furls[$objet])) {
 		if (
 			function_exists($f = 'generer_' . $objet . '_url_ecrire')
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index b9c2734ecd..1b4578d929 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -1826,11 +1826,11 @@ function charger_fonction_url(string $quoi, string $type = '') {
 
 
 /**
- * Fonction codant et décodant les URLs des objets SQL mis en page par SPIP
+ * Fonction codant  les URLs des objets SQL mis en page par SPIP
  *
  * @api
- * @param string $id
- *   numero de la cle primaire si nombre, URL a decoder si pas numerique
+ * @param int|string|null $id
+ *   numero de la cle primaire si nombre
  * @param string $entite
  *   surnom de la table SQL (donne acces au nom de cle primaire)
  * @param string $args
@@ -1849,10 +1849,11 @@ function charger_fonction_url(string $quoi, string $type = '') {
  *   array : derogatoire, la fonction d'url retourne (objet,id_objet) utilises par nettoyer_raccourcis_typo() pour generer un lien titre
  *           (cas des raccourcis personalises [->spip20] : il faut implementer une fonction generer_spip_url et une fonction generer_spip_url_ecrire)
  */
-function generer_objet_url(int $id, string $entite, string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string {
+function generer_objet_url($id, string $entite, string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string {
 	if ($public === null) {
 		$public = !test_espace_prive();
 	}
+	$id = intval($id);
 	$entite = objet_type($entite); // cas particulier d'appels sur objet/id_objet...
 
 	if (!$public) {
@@ -1905,13 +1906,14 @@ function generer_url_entite($id = 0, $entite = '', $args = '', $ancre = '', $pub
 
 /**
  * Generer l'url vers la page d'edition dans ecrire/
- * @param int $id
+ * @param int|string|null $id
  * @param string $entite
  * @param string $args
  * @param string $ancre
  * @return string
  */
-function generer_objet_url_ecrire_edit(int $id, string $entite, string $args = '', string $ancre = ''): string {
+function generer_objet_url_ecrire_edit($id, string $entite, string $args = '', string $ancre = ''): string {
+	$id = intval($id);
 	$exec = objet_info($entite, 'url_edit');
 	$url = generer_url_ecrire($exec, $args);
 	if (intval($id)) {
@@ -1970,7 +1972,7 @@ function urlencode_1738($url) {
 /**
  * Generer l'url absolue vers un objet
  *
- * @param int $id
+ * @param int|string|null $id
  * @param string $entite
  * @param string $args
  * @param string $ancre
@@ -1979,7 +1981,8 @@ function urlencode_1738($url) {
  * @param string $connect
  * @return string
  */
-function generer_objet_url_absolue(int $id = 0, string $entite = '', string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string {
+function generer_objet_url_absolue($id = 0, string $entite = '', string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string {
+	$id = intval($id);
 	$h = generer_objet_url($id, $entite, $args, $ancre, $public, $type, $connect);
 	if (!preg_match(',^\w+:,', $h)) {
 		include_spip('inc/filtres_mini');
-- 
GitLab