From 914d9cf644fcc8750b3cb0eb8da18813b4d76b6c Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Wed, 5 Feb 2025 15:52:07 +0100 Subject: [PATCH] feat: return error token on onclosed double --- src/tokenizer/lexer.c | 9 +++++++-- src/tokenizer/tokenizer.c | 6 ++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/tokenizer/lexer.c b/src/tokenizer/lexer.c index 601268c..3ba2968 100644 --- a/src/tokenizer/lexer.c +++ b/src/tokenizer/lexer.c @@ -57,10 +57,15 @@ static char *ft_parse_quotes(t_lexer *lexer) while (lexer->current_char != '\0' && lexer->current_char != qc) ft_lexer_readchar(lexer); len = lexer->pos - start; - word = malloc(sizeof(char) * len); + word = malloc(sizeof(char) * len + 1); ft_strlcpy(word, lexer->input + start, len + 1); if (lexer->current_char == qc) ft_lexer_readchar(lexer); + else + { + free(word); + return (NULL); + } return (word); } @@ -77,7 +82,7 @@ char *ft_lexer_readword(t_lexer *lexer) } while (ft_isprint(lexer->current_char) && lexer->current_char != '<' && lexer->current_char != '>' && lexer->current_char != '|' - && lexer->current_char != '\0') + && lexer->current_char != '\0' && !ft_isspace(lexer->current_char)) { ft_lexer_readchar(lexer); } diff --git a/src/tokenizer/tokenizer.c b/src/tokenizer/tokenizer.c index 263ab05..83e3218 100644 --- a/src/tokenizer/tokenizer.c +++ b/src/tokenizer/tokenizer.c @@ -32,7 +32,7 @@ t_list *ft_parse_input(t_lexer *lexer) while (TRUE) { token = ft_token_next(lexer); - if (token->type == T_EOF || token->type == T_ERROR) + if (token->type == T_EOF) break ; ft_lstadd_back(&list, ft_lstnew(token)); } @@ -54,7 +54,7 @@ t_list *ft_parse_input(t_lexer *lexer) * 1. Skips any whitespace characters. * 2. Checks the current character in the lexer: * - If it is the end-of-file character ('\0'), creates an EOF token. - * - If it is a special character ('<', '>', '|'), parses + * - If it is a special character ('<', '>', '|'), parses * the token accordingly. * - If it is a printable character, reads the word and creates a word token. * - Otherwise, creates an error token. @@ -77,6 +77,8 @@ t_token *ft_token_next(t_lexer *lexer) else if (ft_isprint(lexer->current_char)) { word = ft_lexer_readword(lexer); + if (!word) + return (ft_token_new(T_ERROR, &lexer->current_char, current_pos)); token = ft_token_new(T_WORD, word, current_pos); free(word); }