diff options
author | Tatsuya Kinoshita <tats@debian.org> | 2021-01-02 00:20:47 +0000 |
---|---|---|
committer | Tatsuya Kinoshita <tats@debian.org> | 2021-01-02 00:20:47 +0000 |
commit | a722a562112506c63c9b6519b8252d633534a35a (patch) | |
tree | 78dc4b8bbefa910007339970eaf004f012d2082f /alloc.h | |
parent | Switch upstream to Debian's w3m (diff) | |
parent | New upstream version 0.5.3+git20210102 (diff) | |
download | w3m-a722a562112506c63c9b6519b8252d633534a35a.tar.gz w3m-a722a562112506c63c9b6519b8252d633534a35a.zip |
Update upstream source from tag 'upstream/0.5.3+git20210102'
Update to upstream version '0.5.3+git20210102'
with Debian dir e89c066385156d7c9ed01b0c8a1a08e01019959d
Diffstat (limited to '')
-rw-r--r-- | alloc.h | 39 |
1 files changed, 39 insertions, 0 deletions
@@ -0,0 +1,39 @@ +/* + * by Scarlett. public domain. + * replacements for w3m's allocation macros which add overflow + * detection and concentrate the macros in one file + */ +#ifndef W3_ALLOC_H +#define W3_ALLOC_H +#include <gc.h> +#include <stdlib.h> +#include <stdio.h> +#include <limits.h> + +static inline size_t +z_mult_no_oflow_(size_t n, size_t size) +{ + if (size != 0 && n > ULONG_MAX / size) { + fprintf(stderr, + "w3m: overflow in malloc, %lu*%lu\n", (unsigned long)n, (unsigned long)size); + exit(1); + } + return n * size; +} + +#define New(type) \ + (GC_MALLOC(sizeof(type))) + +#define NewAtom(type) \ + (GC_MALLOC_ATOMIC(sizeof(type))) + +#define New_N(type, n) \ + (GC_MALLOC(z_mult_no_oflow_((n), sizeof(type)))) + +#define NewAtom_N(type, n) \ + (GC_MALLOC_ATOMIC(z_mult_no_oflow_((n), sizeof(type)))) + +#define New_Reuse(type, ptr, n) \ + (GC_REALLOC((ptr), z_mult_no_oflow_((n), sizeof(type)))) + +#endif /* W3_ALLOC_H */ |