diff options
author | Matthias Andree <matthias.andree@gmx.de> | 2021-08-26 23:53:14 +0200 |
---|---|---|
committer | Matthias Andree <matthias.andree@gmx.de> | 2021-08-27 00:16:12 +0200 |
commit | 5cca5d1e300a41bda91b983c8ccf7fbb60ccb957 (patch) | |
tree | cd75e9ea3c40eb833da0448cfb090831f2ec40f4 /fetchmail.c | |
parent | 27e6d102926a1d60bff82a7a511acd9cf2a9b76e (diff) | |
download | fetchmail-5cca5d1e300a41bda91b983c8ccf7fbb60ccb957.tar.gz fetchmail-5cca5d1e300a41bda91b983c8ccf7fbb60ccb957.tar.bz2 fetchmail-5cca5d1e300a41bda91b983c8ccf7fbb60ccb957.zip |
fetchmail.c: Fix SIGSEGV optmerge()ing "no envelope"
Reported by Bjørn Mork, fixes Debian Bug#992400.
Crash happens inside xstrdup() on a strlen((char *)-1) where
the argument is constant and the trigger is a local trusted
configuration file, so not deemed a vulnerability.
Diffstat (limited to 'fetchmail.c')
-rw-r--r-- | fetchmail.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fetchmail.c b/fetchmail.c index ac8e4607..71ecc1b0 100644 --- a/fetchmail.c +++ b/fetchmail.c @@ -996,7 +996,7 @@ static void optmerge(struct query *h2, struct query *h1, int force) list_merge(&h2->antispam, &h1->antispam, force); #define FLAG_MERGE(fld) do { if (force ? !!h1->fld : !h2->fld) h2->fld = h1->fld; } while (0) -#define STRING_MERGE(fld) do { if (force ? !!h1->fld : !h2->fld) { if (h2->fld) free((void *)h2->fld), h2->fld = 0; if (h1->fld) h2->fld = xstrdup(h1->fld); } } while (0) +#define STRING_MERGE(fld) do { if (force ? !!h1->fld : !h2->fld) { if (h2->fld) free((void *)h2->fld), h2->fld = 0; if (h1->fld) { if (h1->fld != STRING_DISABLED) h2->fld = xstrdup(h1->fld); else h2->fld = STRING_DISABLED; } } } while (0) STRING_MERGE(server.via); FLAG_MERGE(server.protocol); STRING_MERGE(server.service); |