parser BUGFIX stack-oveflow protection
In yang/json format by tracking the right and left braces.
In xml by tracking open and close element.
diff --git a/src/parser_yang.c b/src/parser_yang.c
index 4c76d43..7e5cc98 100644
--- a/src/parser_yang.c
+++ b/src/parser_yang.c
@@ -751,7 +751,18 @@
word_start = ctx->in->current;
*kw = lysp_match_kw(ctx->in, &ctx->indent);
- if ((*kw == LY_STMT_SYNTAX_SEMICOLON) || (*kw == LY_STMT_SYNTAX_LEFT_BRACE) || (*kw == LY_STMT_SYNTAX_RIGHT_BRACE)) {
+ if (*kw == LY_STMT_SYNTAX_SEMICOLON) {
+ goto success;
+ } else if (*kw == LY_STMT_SYNTAX_LEFT_BRACE) {
+ ctx->depth++;
+ if (ctx->depth > LY_MAX_BLOCK_DEPTH) {
+ LOGERR(ctx->parsed_mod->mod->ctx, LY_EINVAL,
+ "The maximum number of block nestings has been exceeded.");
+ return LY_EINVAL;
+ }
+ goto success;
+ } else if (*kw == LY_STMT_SYNTAX_RIGHT_BRACE) {
+ ctx->depth--;
goto success;
}