diff --git a/src/parser/pipeline/pipeline_parse.c b/src/parser/pipeline/pipeline_parse.c index 85e01a7..404a41f 100644 --- a/src/parser/pipeline/pipeline_parse.c +++ b/src/parser/pipeline/pipeline_parse.c @@ -6,7 +6,7 @@ /* By: khais +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/24 14:36:43 by khais #+# #+# */ -/* Updated: 2025/02/24 15:09:35 by khais ### ########.fr */ +/* Updated: 2025/02/24 15:21:37 by khais ### ########.fr */ /* */ /* ************************************************************************** */ @@ -77,6 +77,8 @@ static void pipeline_delimit(t_pipeline_builder *builder) ** ** - Assumes that current word is unset. ** - Load the next word. +** - If the current word is a pipe, it means there was a pipe on the start of +** the command, which is disalowed. set ft_errno and return NULL. ** - While there are still words remaining in the input stream ** - If we have a pipe character ** - Delimit the current command @@ -94,6 +96,8 @@ static void pipeline_delimit(t_pipeline_builder *builder) t_pipeline *pipeline_parse_wordlist(t_pipeline_builder *builder) { next_word(builder); + if (current_is_pipe(builder)) + return (builder_destroy(builder), ft_errno(FT_EUNEXPECTED_PIPE), NULL); while (!eof(builder)) { if (current_is_pipe(builder)) diff --git a/tests/parse_pipelines.c b/tests/parse_pipelines.c index 53bf02d..ea2a503 100644 --- a/tests/parse_pipelines.c +++ b/tests/parse_pipelines.c @@ -6,7 +6,7 @@ /* By: khais +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/21 13:13:58 by khais #+# #+# */ -/* Updated: 2025/02/21 16:03:39 by khais ### ########.fr */ +/* Updated: 2025/02/24 15:19:39 by khais ### ########.fr */ /* */ /* ************************************************************************** */ @@ -110,6 +110,13 @@ static void test_parse_pipeline_triple_pipe_rejected(void) assert(ft_errno_get() == FT_EUNEXPECTED_PIPE); } +static void test_parse_pipeline_pipe_at_start_rejected(void) +{ + ft_errno(FT_ESUCCESS); + assert(parse_pipeline("| echo hello | tee output.txt") == NULL); + assert(ft_errno_get() == FT_EUNEXPECTED_PIPE); +} + int main(void) { test_parse_empty_pipeline(); @@ -119,5 +126,6 @@ int main(void) test_parse_pipeline_four_cmd(); test_parse_pipeline_double_pipe_rejected(); test_parse_pipeline_triple_pipe_rejected(); + test_parse_pipeline_pipe_at_start_rejected(); return (0); }