hsts: use one malloc instead of two per entry

Closes #19861
This commit is contained in:
Daniel Stenberg 2025-12-07 12:24:33 +01:00
parent 65597f8fc9
commit 9ec63d8565
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
2 changed files with 6 additions and 17 deletions

View File

@ -75,11 +75,7 @@ struct hsts *Curl_hsts_init(void)
return h;
}
static void hsts_free(struct stsentry *e)
{
curlx_free(CURL_UNCONST(e->host));
curlx_free(e);
}
#define hsts_free(x) curlx_free(x)
void Curl_hsts_cleanup(struct hsts **hp)
{
@ -111,18 +107,11 @@ static CURLcode hsts_create(struct hsts *h,
/* strip off any trailing dot */
--hlen;
if(hlen) {
char *duphost;
struct stsentry *sts = curlx_calloc(1, sizeof(struct stsentry));
struct stsentry *sts = curlx_calloc(1, sizeof(struct stsentry) + hlen);
if(!sts)
return CURLE_OUT_OF_MEMORY;
duphost = Curl_memdup0(hostname, hlen);
if(!duphost) {
curlx_free(sts);
return CURLE_OUT_OF_MEMORY;
}
sts->host = duphost;
/* the null terminator is already there */
memcpy(sts->host, hostname, hlen);
sts->expires = expires;
sts->includeSubDomains = subdomains;
Curl_llist_append(&h->list, sts, &sts->node);
@ -294,7 +283,7 @@ static CURLcode hsts_push(struct Curl_easy *data,
struct tm stamp;
CURLcode result;
e.name = (char *)CURL_UNCONST(sts->host);
e.name = (char *)sts->host;
e.namelen = strlen(sts->host);
e.includeSubDomains = sts->includeSubDomains;

View File

@ -35,9 +35,9 @@ extern time_t deltatime;
struct stsentry {
struct Curl_llist_node node;
const char *host;
curl_off_t expires; /* the timestamp of this entry's expiry */
BIT(includeSubDomains);
char host[1];
};
/* The HSTS cache. Needs to be able to tailmatch hostnames. */