← Commit list

9ec63d8565

Daniel Stenberg
Daniel Stenberg
2025-12-07
SUCCESS Duration: 219s

Subject

hsts: use one malloc instead of two per entry

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

lib/hsts.c+5 -16
@@ -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;
lib/hsts.h+1 -1
@@ -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. */