IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Java : Oracle publie d’urgence des correctifs contre le bogue des nombres à virgule flottante


Sujet :

Langage PHP

  1. #41
    Expert éminent sénior
    Avatar de Idelways
    Homme Profil pro
    Développeur Ruby on Rails / iOS
    Inscrit en
    Juin 2010
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Ruby on Rails / iOS

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 374
    Points : 68 548
    Points
    68 548
    Par défaut
    PHP : deux correctifs pour le bogue des nombres à virgule flottante
    L'équipe de PHP recommande de l'appliquer immédiatement

    Mise à jour du 07/01/2011


    L'équipe de développement de PHP vient de publier des patchs pour corriger le bogue étrange découvert cette semaine. Un bogue capable de provoquer le crash du système par le passage d'un simple paramètre dans l'URL des sites hébergés sur des systèmes x86 (pour plus de détails, lire ci-avant)

    Après analyse, il s'agit vraisemblablement d'un bogue sur le code optimisé pour les x86 du GCC (le compilateur du projet GNU) à l'origine d'une incompatibilité avec x87, l'Unité de calcul en virgule flottante (ou FPU).

    Deux nouvelles versions de PHP viennent donc d'être packagées : la 5.3.5 et la 5.2.17.
    Ces versions n'incluent aucune autre nouveauté que ce correctif.

    L'équipe de PHP "recommande vivement" l'application immédiate de ce patch disponible sur php.net.


    Pour vérifier si votre installation de serveur web est vulnérable à cet bug, exécutez ce script en ligne de commande
    Les deux correctifs sont téléchargeables sur cette page


    Source : l'annonce du lancement de la 5.2.17 et de la 5.3.5, le rapport de bug sur le tracker de GCC

  2. #42
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    885
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 885
    Points : 1 522
    Points
    1 522
    Par défaut
    Citation Envoyé par Flaburgan Voir le message
    @madevilts ton d valait la valeur critique et tu lui as ajouté 1, ou tu as ajouté 1 à d pour obtenir la valeur critique ?
    2.2250738585072011e-308 + 1 = 1 en informatique (à moins d'avoir un processeur qui conserve 309 chiffres significatifs)

    C'est donc la réponse A

  3. #43
    Modérateur
    Avatar de Flaburgan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 229
    Points : 3 579
    Points
    3 579
    Par défaut
    Je ne vois pas trop pourquoi on parle de deni de service par contre, puisqu'il n'est pas question d'asperger de requêtes le serveur mais d'en faire une seule qui le fait crasher...
    Enfin, si deni de service est pris dans le seul "le serveur ne peut plus répondre car occupé à autre chose", ok, je comprends.
    "Historiquement, techniquement, économiquement et moralement, Internet ne peut pas être contrôlé. Autant s’y faire." Laurent Chemla

    Je soutiens Diaspora*, le réseau social libre.

    Veillez à porter une attention toute particulière à l'orthographe...

    Blog collaboratif avec des amis : http://geexxx.fr

    Mon avatar a été fait par chiqitos, merci à lui !

  4. #44
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 506
    Points : 1 289
    Points
    1 289
    Par défaut
    Citation Envoyé par bubulemaster Voir le message
    Comment j'esplique se problème ? Disons, que je commence à me dire que PHP, à voir le nombre de bug qui sont corrigés régulièrement, n'a pas une phase de test (de conception aussi ?) assez complète. (même si j'adore ce langage)
    ??? C'est plutôt le processeur x87 qui n'est pas testé correctement!

  5. #45
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Citation Envoyé par Flaburgan Voir le message
    Je ne vois pas trop pourquoi on parle de deni de service par contre, puisqu'il n'est pas question d'asperger de requêtes le serveur mais d'en faire une seule qui le fait crasher...
    Enfin, si deni de service est pris dans le seul "le serveur ne peut plus répondre car occupé à autre chose", ok, je comprends.
    Le Deny Of Service (refus de service) ne signifie pas qu'on asperge le serveur de requête, ca signifie juste qu'on s'arrange pour que le serveur arrête de traiter des demandes.
    L'une des méthodes pour y arriver est d'asperger le serveur de requête pour qu'il n'arrive plus a répondre aux requêtes "normales".
    Faire crasher le serveur est une autre méthode plus radicale.

  6. #46
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par ctxnop Voir le message
    Citation Envoyé par Flaburgan Voir le message
    Je ne vois pas trop pourquoi on parle de deni de service par contre, puisqu'il n'est pas question d'asperger de requêtes le serveur mais d'en faire une seule qui le fait crasher...
    Enfin, si deni de service est pris dans le seul "le serveur ne peut plus répondre car occupé à autre chose", ok, je comprends.
    Le Deny Of Service (refus de service) ne signifie pas qu'on asperge le serveur de requête, ca signifie juste qu'on s'arrange pour que le serveur arrête de traiter des demandes.
    L'une des méthodes pour y arriver est d'asperger le serveur de requête pour qu'il n'arrive plus a répondre aux requêtes "normales".
    Faire crasher le serveur est une autre méthode plus radicale.
    Oui, le "denial of service" désigne l'état du serveur qui ne répond pas, et pas la manière de l'obtenir.
    En allant chercher loin, couper le courant serait aussi au sens strict une attaque DoS. (même si bien sûr je n'ai jamais vu employer ce terme dans ce cas)

    DDoS=distributed denial of service (attack)="asperger de requêtes le serveur"

  7. #47
    Expert éminent sénior
    Avatar de Idelways
    Homme Profil pro
    Développeur Ruby on Rails / iOS
    Inscrit en
    Juin 2010
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Ruby on Rails / iOS

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 374
    Points : 68 548
    Points
    68 548
    Par défaut
    Le bogue des nombres à virgule flottante refait surface en Java
    Et plonge le compilateur et les programmes dans des boucles infinies

    Mise à jour du 08/02/2011


    Quelque temps après sa correction sur PHP, le bogue étrange des nombres à virgule flottante refait surface sur un langage tout aussi populaire : Java.

    Ce bogue provoquait sur PHP avant sa correction le crash du système par le passage d'un simple paramètre dans l'URL, pour peu que le script convertisse en nombres ou utilise ces variables dans des opérations arithmétiques (pour plus de détails, lire ci-devant)

    Sur Java, un bogue similaire plongerait les programmes à l'exécution (ou leur compilateur) dans des boucles infinies d'après Exploring Binary, le site où ont été mis en lumière les deux bogues.

    Le nombre en question, le désormais célèbre 2.2250738585072012e-308 et ses différentes représentations sont supposés être convertie en 0x1p-1022, qui correspond à la constante DBL_MIN.
    Au lieu de cela, Java se retrouve coincé, oscillant sans arrêt entre les valeurs 0x1p-1022 et 0x0.fffffffffffffp-1022, le plus grand nombre dénormalisé à double précision et à virgule flottante.

    Le bogue serait provoqué par la boucle de correction de la classe FloatingDecimal, chargée de trouver la meilleure approximation, qui la trouve mais la remplace et la retrouve infiniment...

    Le bogue a été reporté à Oracle depuis plusieurs semaines, son rapport a récemment été assigné pour analyse interne non accessible sur Sun Developer Network (SDN).




    Pour reproduire ce bogue à l'exécution des programmes, compilez et exécutez ce programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class runhang {
    public static void main(String[] args) {
      System.out.println("Test:");
      double d = Double.parseDouble("2.2250738585072012e-308");
      System.out.println("Value: " + d);
     }
    }

    Pour provoquer une boucle infinie au niveau du compilateur, il suffit de tenter de compiler cette classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class compilehang {
    public static void main(String[] args) {
      double d = 2.2250738585072012e-308;
      System.out.println("Value: " + d);
     }
    }


    Source : Exploring Binary

    Et vous ?

    Arrivez-vous à reproduire ce bug ?
    Sur quelle plateforme, architecture et version de JRE/JDK ?

  8. #48
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1
    Points : 0
    Points
    0
    Par défaut
    Pour php, il faut que la plateforme soit en 32bits me semble-t-il.

  9. #49
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 657
    Points : 1 240
    Points
    1 240
    Par défaut
    C'est à mon avis un moindre problème dans java ou les données sont strictement typées. Mais je peux me tromper

  10. #50
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par camus3 Voir le message
    C'est à mon avis un moindre problème dans java ou les données sont strictement typées. Mais je peux me tromper
    non c'est pareil.

  11. #51
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 136
    Points : 100
    Points
    100
    Par défaut
    Eclipse a planté rien qu'en collant le 2nd bout de code ..., normal il compile à la volée

  12. #52
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 124
    Points : 318
    Points
    318
    Par défaut
    Question idiote ?

    Je peux ?

    Qui utilise un chiffre pareil ? 2.2250738585072011e-308

    Cela me fait penser au bug du pentium I à sa sortie.

    Les exemples cités java ou php ... On utilise vraiment cela ?

  13. #53
    Membre éprouvé

    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Septembre 2010
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Septembre 2010
    Messages : 450
    Points : 1 073
    Points
    1 073
    Par défaut
    Citation Envoyé par ztor1 Voir le message
    Question idiote ?

    Je peux ?

    Qui utilise un chiffre pareil ? 2.2250738585072011e-308

    Cela me fait penser au bug du pentium I à sa sortie.

    Les exemples cités java ou php ... On utilise vraiment cela ?

    Toute personne malveillante connaissant ce bug et souhaitant dégommer ton application par un moyen, exposé publiquement, de lui fournir cette valeur en entrée. Mettons par exemple dans les appels AJAX utilisant des JSP, ou dans les parametres d'url pour tes servlets Java...
    Si vous moinsez, merci de répondre pour argumenter!
    Ma présentation

  14. #54
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Points : 350
    Points
    350
    Par défaut
    Citation Envoyé par 10_GOTO_10 Voir le message
    2.2250738585072011e-308 + 1 = 1 en informatique (à moins d'avoir un processeur qui conserve 309 chiffres significatifs)

    C'est donc la réponse A
    C'est cela.

    L'interet de mon code, c'est qu'il suffit de passer en url :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monscript.php?d=2.2250738585072011e-308
    et que dans mon script on ai
    pour saturer totalement la machine.
    Elle ne plante pas mais le processeur se calle à 100% et ne redescend jamais.

    Donc il suffit de tester la valeur limite à la place de tous les paramètres d'une url et avec un peu de chance, on sature le serveur.

  15. #55
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 2 155
    Points
    2 155
    Par défaut
    Effectivement, Eclipse plante lamentablement à l'exécution (Eclipse 3.4, JKD1.6_20 + Windows XP).

    Avant, la probabilité de survenance de ce bug était quasi nulle.

    Maintenant que cela est connu il risque d'apparaitre dans des flux de données, soit pour faire une petite blague à un collègue ou pour faire chier

  16. #56
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2010
    Messages : 30
    Points : 66
    Points
    66
    Par défaut
    Comme quoi, les détracteurs du PHP auront vite compris qu'il n'y a pas que ce langage qui posait problème avec ça ^^

  17. #57
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Citation Envoyé par ztor1 Voir le message
    Question idiote ?

    Je peux ?

    Qui utilise un chiffre pareil ? 2.2250738585072011e-308

    Cela me fait penser au bug du pentium I à sa sortie.

    Les exemples cités java ou php ... On utilise vraiment cela ?
    Un exemple entre autre : je veux développer une IA pour un jeu (échecs, dames, othello...), je vais utiliser l'agorithme minimax :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public double minimax(Node node, int depth){
        if(node instance of Leaf || depth == 0){
            return node.value;
        }
        double alpha = Double.MIN_VALUE; // <=> 2.2250738585072012e-308
        for(Node n : node.children){
            alpha = max(alpha, -minimax(n, depth - 1));
        }
        return alpha;
    }
    Bon j'ai pas tester s'il plante vraiment mais l'idée est là. Même s'il est vrai que généralement, on implémente cet algo en utilisant des entiers

  18. #58
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 22
    Points : 41
    Points
    41
    Par défaut
    Je confirme ce bug sur JDK 1.6.0_20

  19. #59
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Il me semble que cela a été corrigé par leurs équipes http://blogs.oracle.com/security/201...e-2010-44.html
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  20. #60
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Le bug double flottant
    Bonjour, Pourquoi ne pas être rationnelle? Ce n'est pas l'étendu du nombre qui permet ma précision. Un nombre calculé peut être irationnel. Le stockage d'une valeur même flotante peut être relative dans la mesure de son exploitation. Alors pourquoi (mis à part certains domaine bien spécifique) approcher au plus juste une valeur irrationnelle? Tant que ce bug n'e'st pas résolu, il est toujours possible d'avoir une précision qui nous dépasse sans remédier au bug.

Discussions similaires

  1. Java : Oracle publie la mise à jour JDK 8u40
    Par Michael Guilloux dans le forum Général Java
    Réponses: 0
    Dernier message: 05/03/2015, 08h39
  2. Java : Oracle publie la Developer Preview du JDK 8
    Par Hinault Romaric dans le forum Général Java
    Réponses: 9
    Dernier message: 11/09/2013, 12h38
  3. stockage des nombres à virgule flottante
    Par Alexdezark dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 24/11/2008, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo