Compare commits

...

2 Commits

Author SHA1 Message Date
chloe a0b204fadd core: parser: Add parser-side nom function
Signed-off-by: Chloe M. <chloe@mirocom.org>
2026-05-23 14:36:55 +00:00
chloe 19c7587f28 core: tokbuf: Fix buffer overflow
Signed-off-by: Chloe M. <chloe@mirocom.org>
2026-05-23 14:36:20 +00:00
2 changed files with 24 additions and 2 deletions
+23 -1
View File
@@ -58,6 +58,28 @@ static const char *toktab[] = {
[TT_U64] = qtok("u64") [TT_U64] = qtok("u64")
}; };
static int
parser_nom(struct cescal_state *state, struct token *res)
{
struct token tok;
if (state == NULL || res == NULL) {
errno = EINVAL;
return -1;
}
if (lexer_nom(state, &tok) < 0) {
return -1;
}
if (tokbuf_push(&state->tokbuf, &tok) < 0) {
return -1;
}
*res = tok;
return 0;
}
int int
parser_parse(struct cescal_state *state) parser_parse(struct cescal_state *state)
{ {
@@ -68,7 +90,7 @@ parser_parse(struct cescal_state *state)
return -1; return -1;
} }
while (lexer_nom(state, &tok) == 0) { while (parser_nom(state, &tok) == 0) {
cc_trace("got token %s\n", tokstr(&tok)); cc_trace("got token %s\n", tokstr(&tok));
} }
+1 -1
View File
@@ -30,7 +30,7 @@ tokbuf_push(struct tokbuf *tokbuf, struct token *tok)
return -1; return -1;
} }
if ((tokbuf->head++) >= TOKBUF_CAP) { if ((tokbuf->head++) >= TOKBUF_CAP - 1) {
tokbuf->head = 0; tokbuf->head = 0;
} }