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) {