diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-07-17 16:33:45 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-07-17 16:33:45 +0200 |
| commit | 450e36f8ddf974e503731288c8d8bb8c62e67e47 (patch) | |
| tree | 428eacfe26c4b7237ff98d339b5ed41b971cfd34 /test | |
| parent | 0fc1e473e3bae0e1df32228ff72b9ab654fd2ac3 (diff) | |
| download | libft-450e36f8ddf974e503731288c8d8bb8c62e67e47.tar.gz libft-450e36f8ddf974e503731288c8d8bb8c62e67e47.tar.bz2 libft-450e36f8ddf974e503731288c8d8bb8c62e67e47.zip | |
Fixing ft_strtol overflow
Diffstat (limited to 'test')
| -rw-r--r-- | test/src/ht/test_ft_htget.c | 2 | ||||
| -rw-r--r-- | test/src/ht/test_ft_htnew.c | 4 | ||||
| -rw-r--r-- | test/src/main.c | 3 | ||||
| -rw-r--r-- | test/src/runner/test_runner_str.c | 6 | ||||
| -rw-r--r-- | test/src/str/test_ft_strtol.c | 129 |
5 files changed, 139 insertions, 5 deletions
diff --git a/test/src/ht/test_ft_htget.c b/test/src/ht/test_ft_htget.c index 4d4b4eb..cddec56 100644 --- a/test/src/ht/test_ft_htget.c +++ b/test/src/ht/test_ft_htget.c @@ -14,8 +14,6 @@ TEST_TEAR_DOWN(ft_htget) /* ft_htdestroy_key(ht); */ } -int helper_segfault_pid; - TEST(ft_htget, segfault) { TEST_ASSERT_SEGFAULT(ft_htget((t_ftht*)NULL, "")); diff --git a/test/src/ht/test_ft_htnew.c b/test/src/ht/test_ft_htnew.c index 17bca6a..b68daa6 100644 --- a/test/src/ht/test_ft_htnew.c +++ b/test/src/ht/test_ft_htnew.c @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/12 22:30:06 by cacharle #+# #+# */ -/* Updated: 2020/02/28 12:15:32 by cacharle ### ########.fr */ +/* Updated: 2020/07/17 14:17:11 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,8 +20,6 @@ TEST_SETUP(ft_htnew) TEST_TEAR_DOWN(ft_htnew) {} -int helper_segfault_pid; - TEST(ft_htnew, segfault) { TEST_ASSERT_SEGFAULT(ft_htnew(10)); diff --git a/test/src/main.c b/test/src/main.c index e962577..9636cf7 100644 --- a/test/src/main.c +++ b/test/src/main.c @@ -1,5 +1,7 @@ #include "libft_test.h" +int helper_segfault_pid = -1; + static void run_all_test(void) { // ctype @@ -34,6 +36,7 @@ static void run_all_test(void) RUN_TEST_GROUP(ft_strsjoinf); RUN_TEST_GROUP(ft_strsub); RUN_TEST_GROUP(ft_strsubf); + RUN_TEST_GROUP(ft_strtol); // ht RUN_TEST_GROUP(ft_htentry_new); diff --git a/test/src/runner/test_runner_str.c b/test/src/runner/test_runner_str.c index 8d3b68a..6806060 100644 --- a/test/src/runner/test_runner_str.c +++ b/test/src/runner/test_runner_str.c @@ -29,3 +29,9 @@ TEST_GROUP_RUNNER(ft_strsubf) { RUN_TEST_CASE(ft_strsubf, basic); } + +TEST_GROUP_RUNNER(ft_strtol) +{ + RUN_TEST_CASE(ft_strtol, basic); + RUN_TEST_CASE(ft_strtol, limits); +} diff --git a/test/src/str/test_ft_strtol.c b/test/src/str/test_ft_strtol.c new file mode 100644 index 0000000..eacaa82 --- /dev/null +++ b/test/src/str/test_ft_strtol.c @@ -0,0 +1,129 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* test_ft_strtol.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/01 19:41:59 by charles #+# #+# */ +/* Updated: 2020/07/17 16:31:20 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft_test.h" + +TEST_GROUP(ft_strtol); + +TEST_SETUP(ft_strtol) +{} + +TEST_TEAR_DOWN(ft_strtol) +{} + +static long expected; +static long actual; +static char *expected_rest; +static char *actual_rest; +static int expected_errno; +static int actual_errno; +static char error_buf[2048]; + +static char *rest = NULL; + +#define TEST_ASSERT_FT_STRTOL(str, base) do { \ + errno = 0; \ + expected = strtol(str, &rest, base); \ + expected_rest = rest; \ + expected_errno = errno; \ + errno = 0; \ + actual = ft_strtol(str, &rest, base); \ + actual_rest = rest; \ + actual_errno = errno; \ + if (actual != expected || actual_errno != expected_errno || expected_rest != actual_rest) \ + { \ + snprintf(error_buf, 2048, \ + "with: ("#str", "#base") expected: %ld actual: %ld " \ + "rest: expected: \"%s\" actual: \"%s\" " \ + "errno: expected: %d actual: %d", \ + expected, actual, expected_rest, actual_rest, expected_errno, actual_errno); \ + TEST_FAIL_MESSAGE(error_buf); \ + } \ +} while(0); + +TEST(ft_strtol, basic) +{ + TEST_ASSERT_FT_STRTOL("", 10); + TEST_ASSERT_FT_STRTOL("0", 10); + TEST_ASSERT_FT_STRTOL("000000000", 10); + TEST_ASSERT_FT_STRTOL("1", 10); + TEST_ASSERT_FT_STRTOL("2", 10); + TEST_ASSERT_FT_STRTOL("3", 10); + TEST_ASSERT_FT_STRTOL("4", 10); + TEST_ASSERT_FT_STRTOL("5", 10); + TEST_ASSERT_FT_STRTOL("6", 10); + TEST_ASSERT_FT_STRTOL("7", 10); + TEST_ASSERT_FT_STRTOL("8", 10); + TEST_ASSERT_FT_STRTOL("9", 10); + TEST_ASSERT_FT_STRTOL("000000000000000000000000000000000000000000000000000000000008", 10); + + TEST_ASSERT_FT_STRTOL(" 9", 10); + TEST_ASSERT_FT_STRTOL(" \v \t\f\t\t\t\n\r\f\r\v9", 10); + /* TEST_ASSERT_FT_STRTOL(" \v . \t\f\t\t\t\n\r\f\r\v9", 10); */ // dont really care atm + TEST_ASSERT_FT_STRTOL(" 9bonjour", 10); + TEST_ASSERT_FT_STRTOL(" \v \t\f\t\t\t\n\r\f\r\v9 \t\t\v\r\f\r", 10); + /* TEST_ASSERT_FT_STRTOL(" \v . \t\f\t\t\t\n\r\f\r\v9 \t bonjour", 10); */ +} + +TEST(ft_strtol, limits) +{ + TEST_ASSERT_FT_STRTOL("-128", 10); + TEST_ASSERT_FT_STRTOL("127", 10); + TEST_ASSERT_FT_STRTOL("255", 10); + TEST_ASSERT_FT_STRTOL("-128", 10); + TEST_ASSERT_FT_STRTOL("127", 10); + TEST_ASSERT_FT_STRTOL("-32768", 10); + TEST_ASSERT_FT_STRTOL("32767", 10); + TEST_ASSERT_FT_STRTOL("65535", 10); + TEST_ASSERT_FT_STRTOL("-2147483648", 10); + TEST_ASSERT_FT_STRTOL("2147483647", 10); + TEST_ASSERT_FT_STRTOL("4294967295", 10); + TEST_ASSERT_FT_STRTOL("-9223372036854775808", 10); + TEST_ASSERT_FT_STRTOL("9223372036854775807", 10); + TEST_ASSERT_FT_STRTOL("18446744073709551615", 10); + + TEST_ASSERT_FT_STRTOL("-129", 10); + TEST_ASSERT_FT_STRTOL("126", 10); + TEST_ASSERT_FT_STRTOL("254", 10); + TEST_ASSERT_FT_STRTOL("-127", 10); + TEST_ASSERT_FT_STRTOL("126", 10); + TEST_ASSERT_FT_STRTOL("-32767", 10); + TEST_ASSERT_FT_STRTOL("32766", 10); + TEST_ASSERT_FT_STRTOL("65534", 10); + TEST_ASSERT_FT_STRTOL("-2147483647", 10); + TEST_ASSERT_FT_STRTOL("2147483646", 10); + TEST_ASSERT_FT_STRTOL("4294967294", 10); + TEST_ASSERT_FT_STRTOL("-9223372036854775807", 10); + TEST_ASSERT_FT_STRTOL("9223372036854775806", 10); + TEST_ASSERT_FT_STRTOL("18446744073709551614", 10); + + TEST_ASSERT_FT_STRTOL("-129", 10); + TEST_ASSERT_FT_STRTOL("128", 10); + TEST_ASSERT_FT_STRTOL("256", 10); + TEST_ASSERT_FT_STRTOL("-129", 10); + TEST_ASSERT_FT_STRTOL("128", 10); + TEST_ASSERT_FT_STRTOL("-32769", 10); + TEST_ASSERT_FT_STRTOL("32768", 10); + TEST_ASSERT_FT_STRTOL("65536", 10); + TEST_ASSERT_FT_STRTOL("-2147483649", 10); + TEST_ASSERT_FT_STRTOL("2147483648", 10); + TEST_ASSERT_FT_STRTOL("4294967296", 10); + TEST_ASSERT_FT_STRTOL("-9223372036854775809", 10); + TEST_ASSERT_FT_STRTOL("9223372036854775808", 10); + TEST_ASSERT_FT_STRTOL("18446744073709551616", 10); + + TEST_ASSERT_FT_STRTOL("-9223372036854775809", 10); + TEST_ASSERT_FT_STRTOL("9223372036854775808", 10); + TEST_ASSERT_FT_STRTOL("-9223372036854775808", 10); + TEST_ASSERT_FT_STRTOL("18446744073709551615", 10); + TEST_ASSERT_FT_STRTOL("18446744073709551616", 10); +} |
