diff options
| author | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:07:58 +0200 |
|---|---|---|
| committer | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:07:58 +0200 |
| commit | 967be9e750221ab2ab783f95df79bb26d290a45e (patch) | |
| tree | 6802900a5e975f9f68b169f0f503f040056d6952 /malloc/beware_overflow | |
Diffstat (limited to 'malloc/beware_overflow')
| -rw-r--r-- | malloc/beware_overflow/beware_overflow.c | 10 | ||||
| -rw-r--r-- | malloc/beware_overflow/beware_overflow.h | 8 | ||||
| -rw-r--r-- | malloc/beware_overflow/main.c | 21 |
3 files changed, 39 insertions, 0 deletions
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 <stddef.h> + +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 <stddef.h> +#include <stdio.h> + +#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; +} |
