• # Intérêt ?

    Posté par . En réponse au journal Tous les parsers JSON sont mauvais. Évalué à 6.

    Et combien de tableaux imbriqués faut-il pour faire planter un parser JSON ?

    L’intérêt est-il de pouvoir manipuler des données légitimes qui utiliseraient disons 10000 niveaux (ça existe ?) ou de se protéger contre des fichiers JSON volontairement malformés ?

    Le module JSON de Perl fixe la limite arbitrairement à 512. Extrait de son manuel :

    max_depth
    $json = $json->max_depth([$maximum_nesting_depth])

    Sets the maximum nesting level (default 512) accepted while encoding or decoding. If a higher nesting level is detected in JSON text or a Perl data structure, then the encoder and decoder will stop and croak at that point.

    À l’essai, si on remonte la limite beaucoup plus haut, le parser en pur Perl s’arrête à 100000, alors que le parser de JSON::XS (écrit en C pour une plus grande rapidité) plante un peu après 74800 sur mon système (JSON utilise un parser ou l’autre suivant si JSON::XS est installé ou non).

    ET bien dans certains langages, très peu.

    Peut-être devrais-tu regarder si les limites que tu atteins avec d’autre langages ne sont pas aussi fixées arbitrairement pour éviter des problèmes...

    Pour référence, le code Perl que j’ai utilisé :

    #!/usr/bin/perl -w
    use strict;
    use JSON;
    my $json = JSON->new;
    $json->max_depth(5000000);
    my $decoded = $json->decode(<STDIN>);

    « Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone