summaryrefslogtreecommitdiff
path: root/crypto/http
diff options
context:
space:
mode:
authorDr. David von Oheimb <David.von.Oheimb@siemens.com>2022-06-28 17:23:45 +0200
committerDr. David von Oheimb <dev@ddvo.net>2022-08-23 08:56:07 +0200
commit52f616990537b22b0ec81475207caef25fdc0886 (patch)
treed094d96d045232db2e4bf2a5d049e928cbdf88cf /crypto/http
parentdb302550d32c0a450a47ab17990dd1b66551186a (diff)
downloadopenssl-new-52f616990537b22b0ec81475207caef25fdc0886.tar.gz
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/http')
-rw-r--r--crypto/http/http_client.c10
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",