From 15302e754e54a0333d0c54ff407493ae25b4923a Mon Sep 17 00:00:00 2001 From: Jessie Murray Date: Mon, 21 Feb 2022 18:55:44 -0800 Subject: [PATCH] Preserve header count when a value is replaced Fix for #217, a regression added in #205. The "header_count" field was incremented even when we overwrote a header entry, which caused Webdis to send a header with no name and no value. --- src/http.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/http.c b/src/http.c index 3e58aff..9da29e1 100644 --- a/src/http.c +++ b/src/http.c @@ -94,6 +94,7 @@ void http_response_set_header(struct http_response *r, const char *k, const char *v, header_copy copy) { int i, pos = r->header_count; + int replaced = 0; /* whether we overwrote a previous value */ size_t key_sz = strlen(k); size_t val_sz = strlen(v); @@ -104,6 +105,7 @@ http_response_set_header(struct http_response *r, const char *k, const char *v, /* free old value before replacing it. */ if(r->headers[i].copy & HEADER_COPY_KEY) free(r->headers[i].key); if(r->headers[i].copy & HEADER_COPY_VALUE) free(r->headers[i].val); + replaced = 1; break; } } @@ -116,7 +118,9 @@ http_response_set_header(struct http_response *r, const char *k, const char *v, sizeof(struct http_header)*(r->headers_array_size + 1)); r->headers_array_size++; } - r->header_count++; + if(!replaced) { + r->header_count++; + } /* copy key if needed */ if(copy & HEADER_COPY_KEY) {