commit 62823db4a40d43e7a9df5f0cfe0a1301580f813a from: Martijn van Duren date: Fri Apr 08 06:59:08 2022 UTC pkrawlen should only be used to test the length, not if the tag might be there or not commit - 2732fb68df18039980a6fb4ff769296dda6c605b commit + 62823db4a40d43e7a9df5f0cfe0a1301580f813a blob - f8e59b6b29842962e6536b727ebe78b09faaf570 blob + 5b0f1e9883cc541964eb5819112b2995d118708d --- main.c +++ main.c @@ -1211,7 +1211,7 @@ dkim_key_text_parse(struct signature *sig, const char const char *end, *tagvend, *b64; char pkraw[UINT16_MAX] = "", pkimp[UINT16_MAX]; size_t pkrawlen = 0, pkoff, linelen, pklen; - int h = 0, k = 0, n = 0, s = 0, t = 0, first = 1, tmp; + int h = 0, k = 0, n = 0, p = 0, s = 0, t = 0, first = 1, tmp; BIO *bio; key = osmtpd_ltok_skip_fws(key, 1); @@ -1303,8 +1303,9 @@ dkim_key_text_parse(struct signature *sig, const char key = end; break; case 'p': - if (pkrawlen != 0) /* Duplicate tag */ + if (p != 0) /* Duplicate tag */ return 0; + p = 1; tagvend = key; while (1) { b64 = osmtpd_ltok_skip_fws(tagvend, 1); @@ -1389,7 +1390,7 @@ dkim_key_text_parse(struct signature *sig, const char return 0; } - if (pkrawlen == 0) /* Missing tag */ + if (!p) /* Missing tag */ return 0; if (k == 0 && sig->ak != EVP_PKEY_RSA) /* Default to RSA */ return 0;