From b2a11a2283ae92c027c49658f2d5080a62d3073a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kha=C3=AFs=20COLIN?= Date: Wed, 23 Oct 2024 10:47:55 +0200 Subject: [PATCH] fix(ft_substr): size_t overflow + logic error --- ft_substr.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ft_substr.c b/ft_substr.c index 155f423..4a1c5d1 100644 --- a/ft_substr.c +++ b/ft_substr.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/17 11:45:52 by kcolin #+# #+# */ -/* Updated: 2024/10/19 18:34:36 by kcolin ### ########.fr */ +/* Updated: 2024/10/23 10:46:53 by kcolin ### ########.fr */ /* */ /* ************************************************************************** */ @@ -38,21 +38,23 @@ char *ft_substr(char const *s, unsigned int start, size_t len) } if (i < start) return (ft_calloc(1, sizeof(char))); - out = ft_calloc(min(substr_len + 1, len + 1), sizeof(char)); + out = ft_calloc(min(substr_len, len) + 1, sizeof(char)); if (out == NULL) return (NULL); - ft_strlcpy(out, s + start, len + 1); + ft_strlcpy(out, s + start, min(substr_len, len) + 1); return (out); } /* #include // BAD +#include // BAD int main(void) { char *data = "This is a long test string."; printf("'%s'\n", ft_substr(data, 0, 4)); + printf("'%s'\n", ft_substr(data, 0, SIZE_MAX)); printf("'%s'\n", ft_substr(data, 15, 4)); printf("'%s'\n", ft_substr(data, 15, 0)); printf("'%s'\n", ft_substr(data, 20, 20));