diff --git a/lib/reader.c b/lib/reader.c index 6bdd650..1f73116 100644 --- a/lib/reader.c +++ b/lib/reader.c @@ -123,6 +123,9 @@ const expression_t * read_expression(memory_pool_t *pool, const char *input, int len) { expression_t *expression; - parse_expression(pool, input, len, &expression); - return expression; + const int used = parse_expression(pool, input, len, &expression); + if (used == len) + return expression; + else + return NULL; } diff --git a/tests/reader_tests.c b/tests/reader_tests.c index 6e7e4e6..8a4b238 100644 --- a/tests/reader_tests.c +++ b/tests/reader_tests.c @@ -166,6 +166,20 @@ static void paren_1_plus_2_times_3_close_paren_parses_as_left_nested(void) ASSERT_EQUAL(3, operand1->number); } +static void garbage_input_yeilds_null(void) +{ + init_memory_pool(&pool); + const expression_t *result = read_expression(&pool, "arwizxhu", 8); + ASSERT_NULL(result); +} + +static void valid_expression_followed_by_garbage_yeilds_null(void) +{ + init_memory_pool(&pool); + const expression_t *result = read_expression(&pool, "5+2jvkre", 8); + ASSERT_NULL(result); +} + int main(void) { TESTING_BEGIN(); @@ -180,5 +194,7 @@ int main(void) RUN_TEST(input_1_times_2_times_3_is_parsed_as_a_left_nested_application); RUN_TEST(input_1_plus_2_times_3_is_parsed_as_a_right_nested_application); RUN_TEST(paren_1_plus_2_times_3_close_paren_parses_as_left_nested); + RUN_TEST(garbage_input_yeilds_null); + RUN_TEST(valid_expression_followed_by_garbage_yeilds_null); TESTING_END(); }