diff --git a/config.h.in b/config.h.in index b3a94fb34..dc03e82dd 100644 --- a/config.h.in +++ b/config.h.in @@ -1584,6 +1584,9 @@ struct sockaddr_storage; # define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__) # define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__) # define strdup(s) unbound_stat_strdup_log(s, __FILE__, __LINE__, __func__) +#ifdef HAVE_REALLOCARRAY +# define reallocarray(p,n,s) unbound_stat_reallocarray_log(p, n, s, __FILE__, __LINE__, __func__) +#endif void *unbound_stat_malloc(size_t size); void *unbound_stat_calloc(size_t nmemb, size_t size); void unbound_stat_free(void *ptr); @@ -1596,6 +1599,8 @@ void unbound_stat_free_log(void *ptr, const char* file, int line, const char* func); void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, int line, const char* func); +void *unbound_stat_reallocarray_log(void *ptr, size_t nmemb, size_t size, + const char* file, int line, const char* func); char *unbound_stat_strdup_log(const char *s, const char* file, int line, const char* func); #elif defined(UNBOUND_ALLOC_LITE) diff --git a/configure.ac b/configure.ac index a2d9d724b..3f5759f58 100644 --- a/configure.ac +++ b/configure.ac @@ -2392,6 +2392,9 @@ struct sockaddr_storage; # define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__) # define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__) # define strdup(s) unbound_stat_strdup_log(s, __FILE__, __LINE__, __func__) +#ifdef HAVE_REALLOCARRAY +# define reallocarray(p,n,s) unbound_stat_reallocarray_log(p, n, s, __FILE__, __LINE__, __func__) +#endif void *unbound_stat_malloc(size_t size); void *unbound_stat_calloc(size_t nmemb, size_t size); void unbound_stat_free(void *ptr); @@ -2404,6 +2407,8 @@ void unbound_stat_free_log(void *ptr, const char* file, int line, const char* func); void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, int line, const char* func); +void *unbound_stat_reallocarray_log(void *ptr, size_t nmemb, size_t size, + const char* file, int line, const char* func); char *unbound_stat_strdup_log(const char *s, const char* file, int line, const char* func); #elif defined(UNBOUND_ALLOC_LITE) diff --git a/doc/Changelog b/doc/Changelog index 9aa70e15e..e88b887b8 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,9 @@ 10 October 2024: Wouter - Fix cookie_file test sporadic fails for time change during the test. + - Fix add reallocarray to alloc stats unit test, and disable + override of strdup in unbound-host, and the result of config + get option is freed properly. 9 October 2024: Wouter - Merge #871: DNS over QUIC. This adds `quic-port: 853` and diff --git a/smallapp/unbound-host.c b/smallapp/unbound-host.c index 8bffe46ce..edca6b9a3 100644 --- a/smallapp/unbound-host.c +++ b/smallapp/unbound-host.c @@ -50,6 +50,8 @@ #undef calloc #undef free #undef realloc +#undef reallocarray +#undef strdup #endif #ifdef UNBOUND_ALLOC_LITE #undef malloc @@ -492,7 +494,11 @@ int main(int argc, char* argv[]) if(strcmp(use_syslog, "yes") == 0) /* disable use-syslog */ check_ub_res(ub_ctx_set_option(ctx, "use-syslog:", "no")); +#ifdef UNBOUND_ALLOC_STATS + unbound_stat_free_log(use_syslog, __FILE__, __LINE__, __func__); +#else free(use_syslog); +#endif } argc -= optind; argv += optind; diff --git a/util/alloc.c b/util/alloc.c index a6c911803..9a99246f5 100644 --- a/util/alloc.c +++ b/util/alloc.c @@ -519,6 +519,15 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, return unbound_stat_realloc(ptr, size); } +/** log to file where alloc was done */ +void *unbound_stat_reallocarray_log(void *ptr, size_t nmemb, size_t size, + const char* file, int line, const char* func) +{ + log_info("%s:%d %s reallocarray(%p, %u, %u)", file, line, func, + ptr, (unsigned)nmemb, (unsigned)size); + return unbound_stat_realloc(ptr, nmemb*size); +} + /** log to file where strdup was done */ char *unbound_stat_strdup_log(const char *s, const char* file, int line, const char* func)