Maximum nesting level limit and efficiency (Re: json-stream-read should validate json too) Amirouche Boubekki 23 Jan 2020 18:54 UTC

> to stay safe, it must have nesting level limit.

I agree with my past self.

I am testing json-fold.  The following test file:

  $ wc -c files/n_structure_open_array_object.json
  250001 files/n_structure_open_array_object.json

Put the library under heavy pressure. The JSON file is invalid because
it does not close the arrays and objects it opens. It does NOT crash
the interpreter but the doom of a DOS is looming Earth Scheme software
systems!

The implementation in master is much much faster but still it would be
noticeable and can in heavy workloads inflict performance problems.

That is why, I would prefer to add a parameter json-max-nesting-level
that would be 42 by default. Regarding the test suite, there is  at
least i_structure_500_nested_arrays.json for which I will change the
paramter so that it pass.

The trampoline CPS code of the sample implementation has still the
merits to exists and is robust: it does not crash chibi scheme. In the
light of those latest results, it is clear to me that there are more
than nips and tricks: trampoline code is slow. The specification does
not and will not prescribe a trampoline-cps style.  People that prefer
maintainability and efficiency will want to implement the
specification, to implement it in direct style and make sure they try
take into account the parameter.