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.
master
Jessie Murray 3 years ago
parent 73f29055c1
commit 15302e754e
No known key found for this signature in database
GPG Key ID: E7E4D57EDDA744C5

@ -94,6 +94,7 @@ void
http_response_set_header(struct http_response *r, const char *k, const char *v, header_copy copy) { http_response_set_header(struct http_response *r, const char *k, const char *v, header_copy copy) {
int i, pos = r->header_count; int i, pos = r->header_count;
int replaced = 0; /* whether we overwrote a previous value */
size_t key_sz = strlen(k); size_t key_sz = strlen(k);
size_t val_sz = strlen(v); 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. */ /* 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_KEY) free(r->headers[i].key);
if(r->headers[i].copy & HEADER_COPY_VALUE) free(r->headers[i].val); if(r->headers[i].copy & HEADER_COPY_VALUE) free(r->headers[i].val);
replaced = 1;
break; 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)); sizeof(struct http_header)*(r->headers_array_size + 1));
r->headers_array_size++; r->headers_array_size++;
} }
r->header_count++; if(!replaced) {
r->header_count++;
}
/* copy key if needed */ /* copy key if needed */
if(copy & HEADER_COPY_KEY) { if(copy & HEADER_COPY_KEY) {

Loading…
Cancel
Save