From 967be9e750221ab2ab783f95df79bb26d290a45e Mon Sep 17 00:00:00 2001 From: Martial Simon Date: Mon, 15 Sep 2025 01:07:58 +0200 Subject: add: added projects --- malloc/beware_overflow/beware_overflow.c | 10 ++++++++++ malloc/beware_overflow/beware_overflow.h | 8 ++++++++ malloc/beware_overflow/main.c | 21 +++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 malloc/beware_overflow/beware_overflow.c create mode 100644 malloc/beware_overflow/beware_overflow.h create mode 100644 malloc/beware_overflow/main.c (limited to 'malloc/beware_overflow') diff --git a/malloc/beware_overflow/beware_overflow.c b/malloc/beware_overflow/beware_overflow.c new file mode 100644 index 0000000..4b2555c --- /dev/null +++ b/malloc/beware_overflow/beware_overflow.c @@ -0,0 +1,10 @@ +#include "beware_overflow.h" + +void *beware_overflow(void *ptr, size_t nmemb, size_t size) +{ + size_t res; + if (__builtin_umull_overflow(nmemb, size, &res)) + return NULL; + char *r = ptr; + return r + res; +} diff --git a/malloc/beware_overflow/beware_overflow.h b/malloc/beware_overflow/beware_overflow.h new file mode 100644 index 0000000..821e81e --- /dev/null +++ b/malloc/beware_overflow/beware_overflow.h @@ -0,0 +1,8 @@ +#ifndef BEWARE_OVERFLOW_H +#define BEWARE_OVERFLOW_H + +#include + +void *beware_overflow(void *ptr, size_t nmemb, size_t size); + +#endif /* BEWARE_OVERFLOW_H */ diff --git a/malloc/beware_overflow/main.c b/malloc/beware_overflow/main.c new file mode 100644 index 0000000..42fd689 --- /dev/null +++ b/malloc/beware_overflow/main.c @@ -0,0 +1,21 @@ +#include +#include + +#include "beware_overflow.h" + +void print_overflow(void *ptr, size_t nmemb, size_t size) +{ + void *begin = ptr; + void *res = beware_overflow(ptr, nmemb, size); + if (res) + printf("Pointer was incremented from %p to %p.\n", begin, res); + else + printf("Overflow detected between %ld and %ld.\n", nmemb, size); +} + +int main(void) +{ + print_overflow((void *)0x1000, 25, 6); + print_overflow((void *)0x40000, 12345678904, 12345678904); + return 0; +} -- cgit v1.2.3