Skip to content

Commit 77ec266

Browse files
committed
Check combined nesting depth limit
Ensure block indent depth and flow level are checked together against MAX_NESTING_LEVEL, not independently. This prevents exceeding the intended limit with e.g. 1000 block indents + 1000 flow levels. Mirrors the approach already used in parser.c.
1 parent 91c2061 commit 77ec266

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

src/scanner.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1181,7 +1181,7 @@ yaml_parser_increase_flow_level(yaml_parser_t *parser)
11811181
return 0;
11821182
}
11831183

1184-
if (parser->flow_level >= MAX_NESTING_LEVEL) {
1184+
if (parser->flow_level + (int)(parser->indents.top - parser->indents.start) >= MAX_NESTING_LEVEL) {
11851185
return yaml_parser_set_scanner_error(parser,
11861186
"while increasing flow level", parser->mark,
11871187
"exceeded maximum nesting depth");
@@ -1235,7 +1235,7 @@ yaml_parser_roll_indent(yaml_parser_t *parser, ptrdiff_t column,
12351235
if (!PUSH(parser, parser->indents, parser->indent))
12361236
return 0;
12371237

1238-
if (!STACK_LIMIT(parser, parser->indents, MAX_NESTING_LEVEL)) {
1238+
if (!STACK_LIMIT(parser, parser->indents, MAX_NESTING_LEVEL - parser->flow_level)) {
12391239
return yaml_parser_set_scanner_error(parser,
12401240
"while increasing block level", parser->mark,
12411241
"exceeded maximum nesting depth");

0 commit comments

Comments
 (0)