diff options
author | Dmitry Belyavskiy <beldmit@gmail.com> | 2021-01-13 08:51:39 +0100 |
---|---|---|
committer | Dmitry Belyavskiy <beldmit@gmail.com> | 2021-01-14 11:23:50 +0100 |
commit | 2a9785c252df6836da90da33aaeed8edb506e556 (patch) | |
tree | b6becef6867ce16d021be89f0ccfd10c6c7050c3 /crypto | |
parent | cfd7225fbb9507b2e443a494459bdaab5236d29d (diff) |
Skip BOM when reading the config file
Fixes #13840
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/13857)
(cherry picked from commit 4369a882a565c42673b28c586a5c46a8bca98d17)
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/conf/conf_def.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/crypto/conf/conf_def.c b/crypto/conf/conf_def.c index 3d710f12ae..c097ec1286 100644 --- a/crypto/conf/conf_def.c +++ b/crypto/conf/conf_def.c @@ -185,6 +185,7 @@ static int def_load_bio(CONF *conf, BIO *in, long *line) BUF_MEM *buff = NULL; char *s, *p, *end; int again; + int first_call = 1; long eline = 0; char btmp[DECIMAL_SIZE(eline) + 1]; CONF_VALUE *v = NULL, *tv; @@ -233,6 +234,19 @@ static int def_load_bio(CONF *conf, BIO *in, long *line) BIO_gets(in, p, CONFBUFSIZE - 1); p[CONFBUFSIZE - 1] = '\0'; ii = i = strlen(p); + if (first_call) { + /* Other BOMs imply unsupported multibyte encoding, + * so don't strip them and let the error raise */ + const unsigned char utf8_bom[3] = {0xEF, 0xBB, 0xBF}; + + if (i >= 3 && memcmp(p, utf8_bom, 3) == 0) { + memmove(p, p + 3, i - 3); + p[i - 3] = 0; + i -= 3; + ii -= 3; + } + first_call = 0; + } if (i == 0 && !again) { /* the currently processed BIO is at EOF */ BIO *parent; |