|
@@ -53,6 +53,7 @@ struct value {
|
|
|
#define ERROR_FLAG_TOKENIZATION (1 << 1)
|
|
#define ERROR_FLAG_TOKENIZATION (1 << 1)
|
|
|
#define ERROR_FLAG_SYNTAX (1 << 2)
|
|
#define ERROR_FLAG_SYNTAX (1 << 2)
|
|
|
#define ERROR_FLAG_DUPLICATE_KEY (1 << 3)
|
|
#define ERROR_FLAG_DUPLICATE_KEY (1 << 3)
|
|
|
|
|
+#define ERROR_FLAG_DEPTH (1 << 4)
|
|
|
|
|
|
|
|
struct parser_state {
|
|
struct parser_state {
|
|
|
NCDValCons cons;
|
|
NCDValCons cons;
|
|
@@ -78,6 +79,9 @@ static void handle_cons_error (struct parser_state *state)
|
|
|
case NCDVALCONS_ERROR_DUPLICATE_KEY:
|
|
case NCDVALCONS_ERROR_DUPLICATE_KEY:
|
|
|
state->error_flags |= ERROR_FLAG_DUPLICATE_KEY;
|
|
state->error_flags |= ERROR_FLAG_DUPLICATE_KEY;
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case NCDVALCONS_ERROR_DEPTH:
|
|
|
|
|
+ state->error_flags |= ERROR_FLAG_DEPTH;
|
|
|
|
|
+ break;
|
|
|
default:
|
|
default:
|
|
|
ASSERT(0);
|
|
ASSERT(0);
|
|
|
}
|
|
}
|
|
@@ -172,6 +176,10 @@ fail:
|
|
|
BLog(BLOG_ERROR, "line %zu, character %zu: duplicate key in map error", line, line_char);
|
|
BLog(BLOG_ERROR, "line %zu, character %zu: duplicate key in map error", line, line_char);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if ((state->error_flags & ERROR_FLAG_DEPTH)) {
|
|
|
|
|
+ BLog(BLOG_ERROR, "line %zu, character %zu: depth limit exceeded", line, line_char);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
|