From 448bf7b01cade87f45fb39f455f37a6aadeeceda Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Thu, 20 May 2021 09:18:49 +0200 Subject: core: Make gpgrt_free robust against legacy free implementations. * src/init.c (_gpgrt_free): Shortcut NULL and save ERRNO. Signed-off-by: Werner Koch --- src/init.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/init.c b/src/init.c index 6239682..2d9f7ab 100644 --- a/src/init.c +++ b/src/init.c @@ -407,7 +407,19 @@ _gpgrt_strconcat (const char *s1, ...) void _gpgrt_free (void *a) { + int save_errno; + + if (!a) + return; /* Shortcut */ + + /* In case ERRNO is set we better save it so that the free machinery + * may not accidentally change ERRNO. We restore it only if it was + * already set to comply with the usual C semantic for ERRNO. + * See also https://dev.gnupg.org/T5393#146261 */ + save_errno = errno; _gpgrt_realloc (a, 0); + if (save_errno && save_errno != errno) + _gpg_err_set_errno (save_errno); } -- cgit v1.2.3