diff --git a/src/parsers/whitespace.c b/src/parsers/whitespace.c index 8e009a43df268bc73257a98d6b790dfc3b1ec928..45c7dcbb0d221d435ab030ea9cc92c312a199fad 100644 --- a/src/parsers/whitespace.c +++ b/src/parsers/whitespace.c @@ -8,7 +8,7 @@ static HParseResult* parse_whitespace(void* env, HParseState *state) { bak = state->input_stream; c = h_read_bits(&state->input_stream, 8, false); if (state->input_stream.overrun) - return NULL; + break; } while (isspace(c)); state->input_stream = bak; return h_do_parse((HParser*)env, state); diff --git a/src/t_parser.c b/src/t_parser.c index ff05e710acb194000e0084531766467114400785..b1f9b6306026528ae31a9c7fc327fc7b02525b15 100644 --- a/src/t_parser.c +++ b/src/t_parser.c @@ -110,12 +110,17 @@ static void test_float32(void) { static void test_whitespace(void) { const HParser *whitespace_ = h_whitespace(h_ch('a')); + const HParser *whitespace_end = h_whitespace(h_end_p()); g_check_parse_ok(whitespace_, "a", 1, "u0x61"); g_check_parse_ok(whitespace_, " a", 2, "u0x61"); g_check_parse_ok(whitespace_, " a", 3, "u0x61"); g_check_parse_ok(whitespace_, "\ta", 2, "u0x61"); g_check_parse_failed(whitespace_, "_a", 2); + + g_check_parse_ok(whitespace_end, "", 0, "NULL"); + g_check_parse_ok(whitespace_end, " ", 2, "NULL"); + g_check_parse_failed(whitespace_end, " x", 3); } static void test_left(void) {