Cohérence du retour de la fonction `envoyer_mail`
Référence originel
https://discuter.spip.net/t/pbm-formidable-suite-mise-a-jour-de-securite-saisies-5-1-11/187934/2
Analyse des causes potentielles du problème
Le problème semble se produire lorsque
- Un email est envoyé par formidable via facteur s'appuyant sur Brevo
- L'email part effectivement
Raison technique à ce problème
La fonction inc_envoyer_mail
du facteur est censé renvoyé un booléen si on en croit la doc https://git.spip.net/spip-contrib-extensions/facteur/-/blame/master/inc/envoyer_mail.php?ref_type=heads#L57. Formidable avait fait confiance à la doc et donc retournait directement le retour de envoyer_mail
dans une fonction dont le type de retour (niveau déclaration de fonction, pas niveau doc) est booléen.
Sauf que selon le provider utiliser, en cas de succès ce n'est pas nécessaire un true qui est renvoyé. Exemple avec la pile d'appel suivante :
- https://git.spip.net/spip-contrib-extensions/facteur/-/blob/master/inc/facteur.php#L251
- https://git.spip.net/spip-contrib-extensions/mailshot/-/blob/master/inc/Facteur/FacteurSendinblue.php?ref_type=heads#L429 qui appelle
- https://git.spip.net/spip-contrib-extensions/mailshot/-/blob/master/inc/Facteur/FacteurApi.php?ref_type=heads#L251
On voit que potentiellement en cas de succès dans SendInBlue, le retour de la fonction d'envoi d'email peut être un tableau.
Piste de résolution
- Formidable accepte des retours non booléens : ca m'a l'air une mauvaise idée d'être moins stricte
- On corrige facteur pour que si le retour est un tableau, on considère cela comme correct et on renvoi un booleen
- On corrige la fonction send() dans les sous classe de facteur livré avev le plugin mailshot pour qu'en cas de réussite ca renvoi
true
J'ai une nette préférence pour le 3 qui me parait aller vers plus de propreté concernant les type de retour.