diff options
author | Eric Wong <bofh@yhbt.net> | 2024-03-24 21:10:43 +0000 |
---|---|---|
committer | Eric Wong <bofh@yhbt.net> | 2024-03-25 21:19:11 +0000 |
commit | 46141941e58419b3325e50eebac683baeede2c19 (patch) | |
tree | 739537e1d5b06c35110083f96f1c451655566a71 /ext/raindrops | |
parent | 38eba33cb1b7b0a3c93afcaa79263e3b1daf4955 (diff) | |
download | raindrops-46141941e58419b3325e50eebac683baeede2c19.tar.gz |
While no user is likely to have enough listeners to trigger an overflow, just use ruby_xrealloc2 to be safe since it's already provided by Ruby (and AFAIK reallocarray(3) isn't standardized).
Diffstat (limited to 'ext/raindrops')
-rw-r--r-- | ext/raindrops/khashl.h | 8 | ||||
-rw-r--r-- | ext/raindrops/linux_inet_diag.c | 4 |
2 files changed, 6 insertions, 6 deletions
diff --git a/ext/raindrops/khashl.h b/ext/raindrops/khashl.h index df97c7f..425d95e 100644 --- a/ext/raindrops/khashl.h +++ b/ext/raindrops/khashl.h @@ -164,9 +164,8 @@ static kh_inline khint_t __kh_h2b(khint_t hash, khint_t bits) { return hash * 26 if (!new_used) return -1; /* not enough memory */ \ n_buckets = h->keys? (khint_t)1U<<h->bits : 0U; \ if (n_buckets < new_n_buckets) { /* expand */ \ - khkey_t *new_keys = (khkey_t*)krealloc((void*)h->keys, new_n_buckets * sizeof(khkey_t)); \ - if (!new_keys) { kfree(new_used); return -1; } \ - h->keys = new_keys; \ + h->keys = ruby_xrealloc2(h->keys, new_n_buckets, \ + sizeof(khkey_t)); \ } /* otherwise shrink */ \ new_mask = new_n_buckets - 1; \ for (j = 0; j != n_buckets; ++j) { \ @@ -189,7 +188,8 @@ static kh_inline khint_t __kh_h2b(khint_t hash, khint_t bits) { return hash * 26 } \ } \ if (n_buckets > new_n_buckets) /* shrink the hash table */ \ - h->keys = (khkey_t*)krealloc((void *)h->keys, new_n_buckets * sizeof(khkey_t)); \ + h->keys = ruby_xrealloc2(h->keys, new_n_buckets, \ + sizeof(khkey_t)); \ kfree(h->used); /* free the working space */ \ h->used = new_used, h->bits = new_bits; \ return 0; \ diff --git a/ext/raindrops/linux_inet_diag.c b/ext/raindrops/linux_inet_diag.c index d0638d7..2fd158a 100644 --- a/ext/raindrops/linux_inet_diag.c +++ b/ext/raindrops/linux_inet_diag.c @@ -53,10 +53,10 @@ struct listen_stats { uint32_t listener_p; }; -/* override khashl.h defaults */ +/* override khashl.h defaults, these run w/o GVL */ #define kcalloc(N,Z) xcalloc(N,Z) #define kmalloc(Z) xmalloc(Z) -#define krealloc(P,Z) xrealloc(P,Z) +#define krealloc(P,Z) abort() /* never called, we use ruby_xrealloc2 */ #define kfree(P) xfree(P) #include "khashl.h" |