File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -2487,6 +2487,9 @@ static VALUE cResumableParser_clear(VALUE self)
24872487 parser -> frames .head = 0 ;
24882488 parser -> value_stack .head = 0 ;
24892489 parser -> state .name_cache .length = 0 ;
2490+ parser -> state .current_nesting = 0 ;
2491+ parser -> state .in_array = 1 ;
2492+ parser -> state .emitted_deprecations = 0 ;
24902493 parser -> state .start = parser -> state .cursor = parser -> state .end = NULL ;
24912494 return self ;
24922495}
Original file line number Diff line number Diff line change @@ -63,6 +63,20 @@ def test_parse_with_empty_buffer_keeps_parser_usable
6363 assert_equal [ 4 ] , @parser . value
6464 end
6565
66+ def test_clear_resets_nesting_depth
67+ # An unfinished document leaks a nesting level; #clear must reset it so a later shallow
68+ # document is not rejected with a spurious NestingError.
69+ parser = new_parser ( max_nesting : 10 )
70+ 10 . times do
71+ parser << '[1' # opens an array that is never closed before clear
72+ parser . parse
73+ parser . clear
74+ end
75+ parser << '[1]'
76+ assert parser . parse
77+ assert_equal [ 1 ] , parser . value
78+ end
79+
6680 def test_parse_document_direct
6781 @parser << '[true]'
6882 assert_equal true , @parser . parse
You can’t perform that action at this time.
0 commit comments