diff --git a/src/hammer.c b/src/hammer.c index 0934a050c970d5aebe9221db56def26fbba6e3b4..85a7fc2f33afa051302e880ce60e1c16917005bb 100644 --- a/src/hammer.c +++ b/src/hammer.c @@ -426,6 +426,7 @@ static void test_action(void) { g_check_parse_ok(action_, "ab", 2, "(u0x41 u0x42)"); g_check_parse_ok(action_, "AB", 2, "(u0x41 u0x42)"); + g_check_parse_failed(action_, "XX", 2); } static void test_not_in(void) { diff --git a/src/parsers/action.c b/src/parsers/action.c index c5b89f9a11154c158359e164a665f0b2ee5d186c..479a840cd8382db524762241ade0d2605ec2416f 100644 --- a/src/parsers/action.c +++ b/src/parsers/action.c @@ -10,8 +10,11 @@ static HParseResult* parse_action(void *env, HParseState *state) { if (a->p && a->action) { HParseResult *tmp = h_do_parse(a->p, state); //HParsedToken *tok = a->action(h_do_parse(a->p, state)); - const HParsedToken *tok = a->action(tmp); - return make_result(state, (HParsedToken*)tok); + if(tmp) { + const HParsedToken *tok = a->action(tmp); + return make_result(state, (HParsedToken*)tok); + } else + return NULL; } else // either the parser's missing or the action's missing return NULL; }