From c467a9357527abb1d59bfdb5082c3e4e61c4fc8d Mon Sep 17 00:00:00 2001 From: Matthieu Marcillaud <marcimat@rezo.net> Date: Wed, 3 May 2017 14:59:33 +0000 Subject: [PATCH] =?UTF-8?q?Ticket=20#3914=20:=20Pour=20le=20calcul=20de=20?= =?UTF-8?q?la=20date=20dans=20les=20formulaires=20de=20datages,=20=C3=A9vi?= =?UTF-8?q?ter=20diff=C3=A9rents=20probl=C3=A8mes=20:=20-=20lorsqu'on=20sa?= =?UTF-8?q?isit=20une=20date=20inexistante=20(31/02/2017),=20retourner=20u?= =?UTF-8?q?ne=20erreur,=20plut=C3=B4t=20que=20d'arbitrairement=20calculer?= =?UTF-8?q?=20une=20date=20sur=20le=20mois=20suivant=20avec=20les=20jours?= =?UTF-8?q?=20en=20trop=20-=20lorsqu'on=20saisit=20une=20heure=20erron?= =?UTF-8?q?=C3=A9e=20(25:00=20ou=2012:78),=20retourner=20une=20erreur=20?= =?UTF-8?q?=C3=A9galement,=20sinon=20l'enregistrement=20SQL=20echoue=20ens?= =?UTF-8?q?uite.=20-=20il=20manquait=20les=20cha=C3=AEnes=20de=20langues?= =?UTF-8?q?=20des=20erreurs,=20depuis=20l'introduction=20de=20ce=20formula?= =?UTF-8?q?ire=20en=20r16420?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/lang/spip_fr.php | 2 ++ prive/formulaires/dater.php | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ecrire/lang/spip_fr.php b/ecrire/lang/spip_fr.php index dadf5d12e6..0fc418cf93 100644 --- a/ecrire/lang/spip_fr.php +++ b/ecrire/lang/spip_fr.php @@ -288,6 +288,8 @@ le site "@nom_site_spip@" (@adresse_login@) :', 'form_prop_non_enregistre' => 'Votre proposition n’a pas été enregistrée.', 'form_prop_sujet' => 'Sujet', 'form_prop_url_site' => 'Adresse URL du site', + 'format_date_incorrecte' => 'La date ou son format est incorrect', + 'format_heure_incorrecte' => 'L’heure ou son format est incorrect', 'forum_non_inscrit' => 'Vous n’êtes pas inscrit, ou l’adresse ou le mot de passe sont erronés.', 'forum_par_auteur' => 'par @auteur@', 'forum_titre_erreur' => 'Erreur...', diff --git a/prive/formulaires/dater.php b/prive/formulaires/dater.php index 8e44e55a42..2aa1e40e24 100644 --- a/prive/formulaires/dater.php +++ b/prive/formulaires/dater.php @@ -318,11 +318,11 @@ function formulaires_dater_traiter_dist($objet, $id_objet, $retour = '', $option } /** - * Récupérer annee,mois,jour sur la date saisie + * Récupérer annee, mois, jour sur la date saisie * * @param string $post * @param string $quoi - * @return array + * @return array|string Chaîne vide si date invalide, tableau (année, mois, jour) sinon. */ function dater_recuperer_date_saisie($post, $quoi = 'date') { if (!preg_match('#^(?:(?:([0-9]{1,2})[/-])?([0-9]{1,2})[/-])?([0-9]{4}|[0-9]{1,2})#', $post, $regs)) { @@ -335,13 +335,13 @@ function dater_recuperer_date_saisie($post, $quoi = 'date') { return array($regs[3], $regs[2], $regs[1]); } else { - $t = mktime(0, 0, 0, $regs[2], $regs[1], $regs[3]); - // si la date n'est pas valide selon mktime, la refuser - if (!$t) { - return ''; + if ( + checkdate(intval($regs[2]), intval($regs[1]), intval($regs[3])) + and $t = mktime(0, 0, 0, $regs[2], $regs[1], $regs[3]) + ) { + return array(date('Y', $t), date('m', $t), date('d', $t)); } - - return array(date('Y', $t), date('m', $t), date('d', $t)); + return ''; } } @@ -355,6 +355,9 @@ function dater_recuperer_heure_saisie($post) { if (!preg_match('#([0-9]{1,2})(?:[h:](?:([0-9]{1,2}))?)?#', $post, $regs)) { return ''; } + if ($regs[1] >= 23 or $regs[2] >= 59) { + return ''; + } return array($regs[1], $regs[2]); } -- GitLab