]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Fix 'Compression' header logic
authorVsevolod Stakhov <vsevolod@rspamd.com>
Wed, 6 Aug 2025 15:58:58 +0000 (16:58 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Wed, 6 Aug 2025 15:58:58 +0000 (16:58 +0100)
src/rspamd_proxy.c

index c31e9ab629938de96eb97629d99786773e9b3e8b..195442f51418555cc6825bccc7c4c69873fb11df 100644 (file)
@@ -2694,8 +2694,28 @@ proxy_client_finish_handler(struct rspamd_http_connection *conn,
                session->shmem_ref = rspamd_http_message_shmem_ref(session->client_message);
 
                /* Check if client supports compression */
+               const rspamd_ftok_t *compression_hdr = rspamd_http_message_find_header(session->client_message, COMPRESSION_HEADER);
                const rspamd_ftok_t *accept_encoding = rspamd_http_message_find_header(session->client_message, "Accept-Encoding");
-               if (accept_encoding && rspamd_substring_search_caseless(accept_encoding->begin, accept_encoding->len, "zstd", 4) != -1) {
+               gboolean client_supports_compression = FALSE;
+
+               /* Rule 1: If request had Compression: zstd header, client supports compression */
+               if (compression_hdr) {
+                       rspamd_ftok_t zstd_tok;
+                       zstd_tok.begin = "zstd";
+                       zstd_tok.len = 4;
+
+                       if (rspamd_ftok_casecmp(compression_hdr, &zstd_tok) == 0) {
+                               client_supports_compression = TRUE;
+                       }
+               }
+
+               /* Rule 2: If client has Accept-Encoding: zstd header, client supports compression */
+               if (!client_supports_compression && accept_encoding &&
+                       rspamd_substring_search_caseless(accept_encoding->begin, accept_encoding->len, "zstd", 4) != -1) {
+                       client_supports_compression = TRUE;
+               }
+
+               if (client_supports_compression) {
                        session->flags |= RSPAMD_PROXY_SESSION_FLAG_CLIENT_SUPPORTS_COMPRESSION;
                }
                else {