Changeset 82261 in spip-zone


Ignore:
Timestamp:
May 7, 2014, 2:13:23 PM (5 years ago)
Author:
cedric@…
Message:

Robustesse/resilience : Il semble que le post de certains utilisateurs soit "perdu" par formidable.
On reduit les risques de sortie anormale de traiter() sans message d'erreur, et on log $_POST dans un post-mortem pour retrouver la trace du problème a posteriori et recouvrer eventuellement les donnees (on préfere utiliser json_encode qui ne cassera pas lors du decode malgré l'échappement des < par spip_log)

Location:
_plugins_/formidable/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/formidable/trunk/formulaires/formidable.php

    r81619 r82261  
    1616
    1717function formidable_id_formulaire($id){
     18        // on utilise une static pour etre sur que si l'appel dans verifier() passe, celui dans traiter() passera aussi
     19        // meme si entre temps on perds la base
     20        static $id_formulaires = array();
     21        if (isset($id_formulaires[$id]))
     22                return $id_formulaires[$id];
     23
    1824        if (intval($id)>0)
    1925                $where = 'id_formulaire = ' . intval($id);
     
    2834                AND !test_espace_prive()
    2935          AND !objet_test_si_publie("formulaire",$id_formulaire))
    30                 return 0;
    31 
    32         return $id_formulaire;
     36                return $id_formulaires[$id] = 0;
     37
     38        return $id_formulaires[$id] = $id_formulaire;
    3339}
    3440
     
    180186
    181187        // On peut donner soit un id soit un identifiant
    182         if (!$id_formulaire = formidable_id_formulaire($id))
    183                 return;
    184 
    185         // Sale bête !
    186         if (_request('mechantrobot')!=''){
    187                 $erreurs['hahahaha'] = 'hahahaha';
    188                 return $erreurs;
    189         }
    190 
    191         $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire));
    192         $saisies = unserialize($formulaire['saisies']);
    193 
    194         $erreurs = saisies_verifier($saisies);
    195 
    196         if ($erreurs and !isset($erreurs['message_erreur']))
    197                 $erreurs['message_erreur'] = _T('formidable:erreur_generique');
     188        if (!$id_formulaire = formidable_id_formulaire($id)){
     189
     190                $erreurs['message_erreur'] = _T('formidable:erreur_base');
     191
     192        }
     193        else {
     194
     195                // Sale bête !
     196                if (_request('mechantrobot')!=''){
     197                        $erreurs['hahahaha'] = 'hahahaha';
     198                        return $erreurs;
     199                }
     200
     201                $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire));
     202                $saisies = unserialize($formulaire['saisies']);
     203
     204                $erreurs = saisies_verifier($saisies);
     205
     206                if ($erreurs and !isset($erreurs['message_erreur']))
     207                        $erreurs['message_erreur'] = _T('formidable:erreur_generique');
     208
     209        }
    198210
    199211        return $erreurs;
     
    227239        $retours = array();
    228240
     241        // POST Mortem de securite : on log le $_POST pour ne pas le perdre si quelque chose se passe mal
     242        include_spip("inc/json");
     243        $post = json_encode($_POST);
     244        spip_log($post,"formidable_post"._LOG_INFO_IMPORTANTE);
     245
    229246        // On peut donner soit un id soit un identifiant
    230247        if (!$id_formulaire = formidable_id_formulaire($id))
    231                 return;
     248                return array('message_erreur'=>_T('formidable:erreur_base'));
    232249
    233250        $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . $id_formulaire);
     
    300317        }
    301318        else {
    302                 $retours['message_ok'] = _T('formidable:retour_aucun_traitement');
     319                $retours['message_erreur'] = _T('formidable:retour_aucun_traitement');
    303320        }
    304321
  • _plugins_/formidable/trunk/paquet.xml

    r82248 r82261  
    22        prefix="formidable"
    33        categorie="communication"
    4         version="2.5.13"
     4        version="2.5.14"
    55        etat="test"
    66        compatibilite="[3.0.0;3.0.*]"
Note: See TracChangeset for help on using the changeset viewer.