diff options
author | Dr. David von Oheimb <David.von.Oheimb@siemens.com> | 2022-06-28 17:23:45 +0200 |
---|---|---|
committer | Dr. David von Oheimb <dev@ddvo.net> | 2022-08-23 08:56:07 +0200 |
commit | 52f616990537b22b0ec81475207caef25fdc0886 (patch) | |
tree | d094d96d045232db2e4bf2a5d049e928cbdf88cf /crypto | |
parent | db302550d32c0a450a47ab17990dd1b66551186a (diff) |
OSSL_HTTP_REQ_CTX_nbio: add support for partial content-type string matching
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: David von Oheimb <david.von.oheimb@siemens.com>
(Merged from https://github.com/openssl/openssl/pull/18675)
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/http/http_client.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/crypto/http/http_client.c b/crypto/http/http_client.c index 5376c20ca2..005cbfc749 100644 --- a/crypto/http/http_client.c +++ b/crypto/http/http_client.c @@ -714,7 +714,15 @@ int OSSL_HTTP_REQ_CTX_nbio(OSSL_HTTP_REQ_CTX *rctx) if (OPENSSL_strcasecmp(key, "Content-Type") == 0) { if (rctx->state == OHS_HEADERS && rctx->expected_ct != NULL) { - if (OPENSSL_strcasecmp(rctx->expected_ct, value) != 0) { + const char *semicolon; + + if (OPENSSL_strcasecmp(rctx->expected_ct, value) != 0 + /* ignore past ';' unless expected_ct contains ';' */ + && (strchr(rctx->expected_ct, ';') != NULL + || (semicolon = strchr(value, ';')) == NULL + || (size_t)(semicolon - value) != strlen(rctx->expected_ct) + || OPENSSL_strncasecmp(rctx->expected_ct, value, + semicolon - value) != 0)) { ERR_raise_data(ERR_LIB_HTTP, HTTP_R_UNEXPECTED_CONTENT_TYPE, "expected=%s, actual=%s", |