ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/JSON-XS/XS.pm
(Generate patch)

Comparing JSON-XS/XS.pm (file contents):
Revision 1.22 by root, Sun Mar 25 02:37:00 2007 UTC vs.
Revision 1.23 by root, Sun Mar 25 21:19:13 2007 UTC

128 $perl_scalar = JSON::XS->new->utf8->decode ($json_text) 128 $perl_scalar = JSON::XS->new->utf8->decode ($json_text)
129 129
130except being faster. 130except being faster.
131 131
132=back 132=back
133
133 134
134=head1 OBJECT-ORIENTED INTERFACE 135=head1 OBJECT-ORIENTED INTERFACE
135 136
136The object oriented interface lets you configure your own encoding or 137The object oriented interface lets you configure your own encoding or
137decoding style, within the limits of supported formats. 138decoding style, within the limits of supported formats.
301 302
302In the future, this setting might control other things, such as converting 303In the future, this setting might control other things, such as converting
303strings that look like integers or floats into integers or floats 304strings that look like integers or floats into integers or floats
304internally (there is no difference on the Perl level), saving space. 305internally (there is no difference on the Perl level), saving space.
305 306
307=item $json = $json->max_depth ([$maximum_nesting_depth])
308
309Sets the maximum nesting level (default C<8192>) accepted while encoding
310or decoding. If the JSON text or Perl data structure has an equal or
311higher nesting level then this limit, then the encoder and decoder will
312stop and croak at that point.
313
314Nesting level is defined by number of hash- or arrayrefs that the encoder
315needs to traverse to reach a given point or the number of C<{> or C<[>
316characters without their matching closing parenthesis crossed to reach a
317given character in a string.
318
319Setting the maximum depth to one disallows any nesting, so that ensures
320that the object is only a single hash/object or array.
321
322The argument to C<max_depth> will be rounded up to the next nearest power
323of two.
324
325See SECURITY CONSIDERATIONS, below, for more info on why this is useful.
326
306=item $json_text = $json->encode ($perl_scalar) 327=item $json_text = $json->encode ($perl_scalar)
307 328
308Converts the given Perl data structure (a simple scalar or a reference 329Converts the given Perl data structure (a simple scalar or a reference
309to a hash or array) to its JSON representation. Simple scalars will be 330to a hash or array) to its JSON representation. Simple scalars will be
310converted into JSON string or number sequences, while references to arrays 331converted into JSON string or number sequences, while references to arrays
320JSON numbers and strings become simple Perl scalars. JSON arrays become 341JSON numbers and strings become simple Perl scalars. JSON arrays become
321Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes 342Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes
322C<1>, C<false> becomes C<0> and C<null> becomes C<undef>. 343C<1>, C<false> becomes C<0> and C<null> becomes C<undef>.
323 344
324=back 345=back
346
325 347
326=head1 MAPPING 348=head1 MAPPING
327 349
328This section describes how JSON::XS maps Perl values to JSON values and 350This section describes how JSON::XS maps Perl values to JSON values and
329vice versa. These mappings are designed to "do the right thing" in most 351vice versa. These mappings are designed to "do the right thing" in most
440=item circular data structures 462=item circular data structures
441 463
442Those will be encoded until memory or stackspace runs out. 464Those will be encoded until memory or stackspace runs out.
443 465
444=back 466=back
467
445 468
446=head1 COMPARISON 469=head1 COMPARISON
447 470
448As already mentioned, this module was created because none of the existing 471As already mentioned, this module was created because none of the existing
449JSON modules could be made to work correctly. First I will describe the 472JSON modules could be made to work correctly. First I will describe the
578(such as JSON::PC) seem to decode faster than JSON::XS, but the result 601(such as JSON::PC) seem to decode faster than JSON::XS, but the result
579will be broken due to missing (or wrong) unicode handling. Others refuse 602will be broken due to missing (or wrong) unicode handling. Others refuse
580to decode or encode properly, so it was impossible to prepare a fair 603to decode or encode properly, so it was impossible to prepare a fair
581comparison table for that case. 604comparison table for that case.
582 605
583=head1 RESOURCE LIMITS
584 606
585JSON::XS does not impose any limits on the size of JSON texts or Perl 607=head1 SECURITY CONSIDERATIONS
586values they represent - if your machine can handle it, JSON::XS will 608
587encode or decode it. Future versions might optionally impose structure 609When you are using JSON in a protocol, talking to untrusted potentially
588depth and memory use resource limits. 610hostile creatures requires relatively few measures.
611
612First of all, your JSON decoder should be secure, that is, should not have
613any buffer overflows. Obviously, this module should ensure that and I am
614trying hard on making that true, but you never know.
615
616Second, you need to avoid resource-starving attacks. That means you should
617limit the size of JSON texts you accept, or make sure then when your
618resources run out, thats just fine (e.g. by using a separate process that
619can crash safely). The size of a JSON text in octets or characters is
620usually a good indication of the size of the resources required to decode
621it into a Perl structure.
622
623Third, JSON::XS recurses using the C stack when decoding objects and
624arrays. The C stack is a limited resource: for instance, on my amd64
625machine with 8MB of stack size I can decode around 180k nested arrays
626but only 14k nested JSON objects. If that is exceeded, the program
627crashes. Thats why the default nesting limit is set to 8192. If your
628process has a smaller stack, you should adjust this setting accordingly
629with the C<max_depth> method.
630
631And last but least, something else could bomb you that I forgot to think
632of. In that case, you get to keep the pieces. I am alway sopen for hints,
633though...
634
589 635
590=head1 BUGS 636=head1 BUGS
591 637
592While the goal of this module is to be correct, that unfortunately does 638While the goal of this module is to be correct, that unfortunately does
593not mean its bug-free, only that I think its design is bug-free. It is 639not mean its bug-free, only that I think its design is bug-free. It is
594still very young and not well-tested. If you keep reporting bugs they will 640still relatively early in its development. If you keep reporting bugs they
595be fixed swiftly, though. 641will be fixed swiftly, though.
596 642
597=cut 643=cut
598 644
5991; 6451;
600 646

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines