For the `accept-encoding` header a bitmap and not a hash is stored. --- src/cache.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/cache.c b/src/cache.c index 965509871..9e01de402 100644 --- a/src/cache.c +++ b/src/cache.c @@ -97,7 +97,7 @@ struct vary_hashing_information { enum vary_header_bit value; /* Bit representing the header in a vary signature */ unsigned int hash_length; /* Size of the sub hash for this header's value */ int(*norm_fn)(struct htx*,struct ist hdr_name,char* buf,unsigned int* buf_len); /* Normalization function */ - int(*cmp_fn)(const void *ref_hash, const void *new_hash, unsigned int hash_len); /* Comparison function, should return 0 if the hashes are alike */ + int(*cmp_fn)(const void *ref, const void *new, unsigned int len); /* Comparison function, should return 0 if the hashes are alike */ }; static int http_request_prebuild_full_secondary_key(struct stream *s); @@ -113,12 +113,12 @@ static int accept_encoding_normalizer(struct htx *htx, struct ist hdr_name, static int default_normalizer(struct htx *htx, struct ist hdr_name, char *buf, unsigned int *buf_len); -static int accept_encoding_hash_cmp(const void *ref_hash, const void *new_hash, unsigned int hash_len); +static int accept_encoding_bitmap_cmp(const void *ref, const void *new, unsigned int len); /* Warning : do not forget to update HTTP_CACHE_SEC_KEY_LEN when new items are * added to this array. */ const struct vary_hashing_information vary_information[] = { - { IST("accept-encoding"), VARY_ACCEPT_ENCODING, sizeof(uint32_t), &accept_encoding_normalizer, &accept_encoding_hash_cmp }, + { IST("accept-encoding"), VARY_ACCEPT_ENCODING, sizeof(uint32_t), &accept_encoding_normalizer, &accept_encoding_bitmap_cmp }, { IST("referer"), VARY_REFERER, sizeof(int), &default_normalizer, NULL }, }; @@ -2356,15 +2356,15 @@ static int default_normalizer(struct htx *htx, struct ist hdr_name, } /* - * Accept-Encoding sub-hash comparison function. - * Returns 0 if the hashes are alike. + * Accept-Encoding bitmap comparison function. + * Returns 0 if the bitmaps are compatible. */ -static int accept_encoding_hash_cmp(const void *ref_hash, const void *new_hash, unsigned int hash_len) +static int accept_encoding_bitmap_cmp(const void *ref, const void *new, unsigned int len) { - uint32_t ref = read_u32(ref_hash); - uint32_t new = read_u32(new_hash); + uint32_t ref_bitmap = read_u32(ref); + uint32_t new_bitmap = read_u32(new); - if (!(ref & VARY_ENCODING_OTHER)) { + if (!(ref_bitmap & VARY_ENCODING_OTHER)) { /* All the bits set in the reference bitmap correspond to the * stored response' encoding and should all be set in the new * encoding bitmap in order for the client to be able to manage @@ -2375,7 +2375,7 @@ static int accept_encoding_hash_cmp(const void *ref_hash, const void *new_hash, * the cache (as far as the accept-encoding part is concerned). */ - return (ref & new) != ref; + return (ref_bitmap & new_bitmap) != ref_bitmap; } else { return 1; -- 2.29.0