]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
CLEANUP: ocsp: do no use strpcy() to copy a path!
authorWilly Tarreau <w@1wt.eu>
Fri, 7 Apr 2023 15:49:37 +0000 (17:49 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 7 Apr 2023 15:57:05 +0000 (17:57 +0200)
strcpy() is quite nasty but tolerable to copy constants, but here
it copies a variable path into a node in a code path that's not
trivial to follow given that it takes the node as the result of
a tree lookup. Let's get rid of it and mention where the entry
is retrieved.

src/ssl_sock.c

index ee6183a65539d8970823a826ced4b3204b1966c7..abbcfa6af25d863de058d35f4a9ade780841458f 100644 (file)
@@ -1119,7 +1119,7 @@ static int ssl_sock_load_ocsp(const char *path, SSL_CTX *ctx, struct ckch_data *
 #endif
        struct buffer *ocsp_uri = get_trash_chunk();
        char *err = NULL;
-
+       size_t path_len;
 
        x = data->cert;
        if (!x)
@@ -1164,7 +1164,8 @@ static int ssl_sock_load_ocsp(const char *path, SSL_CTX *ctx, struct ckch_data *
        if (!i || (i > OCSP_MAX_CERTID_ASN1_LENGTH))
                goto out;
 
-       ocsp = calloc(1, sizeof(*ocsp)+strlen(path)+1);
+       path_len = strlen(path);
+       ocsp = calloc(1, sizeof(*ocsp) + path_len + 1);
        if (!ocsp)
                goto out;
 
@@ -1265,7 +1266,13 @@ static int ssl_sock_load_ocsp(const char *path, SSL_CTX *ctx, struct ckch_data *
                        goto out;
                }
 
-               strcpy(iocsp->path, path);
+               /* Note: if we arrive here, ocsp==NULL because iocsp==ocsp
+                * after the ebmb_insert(), which indicates that we've
+                * just inserted this new node and that it's the one for
+                * which we previously allocated enough room for path_len+1
+                * chars.
+                */
+               memcpy(iocsp->path, path, path_len + 1);
 
                if (data->ocsp_update_mode == SSL_SOCK_OCSP_UPDATE_ON) {
                        ssl_ocsp_update_insert(iocsp);