Commit 05240cb6dc for bind

commit 05240cb6dc45b8e08f218cc1cb10cc6e33fc06bc
Author: OndÅ™ej Surý <ondrej@isc.org>
Date:   Tue Sep 22 10:59:55 2026 +0200

    Annotate the remaining flexible array members with counted_by

    Each of these structs already stores the element count of its trailing
    array in a member that is set before the array is first touched, so the
    attribute costs nothing and lets _FORTIFY_SOURCE and the bounds
    sanitizer check accesses that are otherwise invisible to them.

    Assisted-by: Claude:claude-opus-5

diff --git a/lib/dns/qp_p.h b/lib/dns/qp_p.h
index 0378ce2ef8..6d8e28050d 100644
--- a/lib/dns/qp_p.h
+++ b/lib/dns/qp_p.h
@@ -19,6 +19,7 @@

 #pragma once

+#include <isc/attributes.h>
 #include <isc/bit.h>
 #include <isc/refcount.h>

@@ -336,7 +337,7 @@ typedef struct qp_rcuctx {
 	dns_qpmulti_t *multi;
 	ISC_LINK(struct qp_rcuctx) link;
 	dns_qpchunk_t count;
-	dns_qpchunk_t chunk[];
+	dns_qpchunk_t chunk[] ISC_ATTR_COUNTED_BY(count);
 } qp_rcuctx_t;

 /*
diff --git a/lib/dns/qpcache.c b/lib/dns/qpcache.c
index c9f90d724e..a2b3852d9e 100644
--- a/lib/dns/qpcache.c
+++ b/lib/dns/qpcache.c
@@ -20,6 +20,7 @@
 #include <isc/ascii.h>
 #include <isc/async.h>
 #include <isc/atomic.h>
+#include <isc/attributes.h>
 #include <isc/file.h>
 #include <isc/hex.h>
 #include <isc/list.h>
@@ -213,7 +214,7 @@ struct qpcache {
 	dns_qp_t *tree;

 	size_t buckets_count;
-	qpcache_bucket_t buckets[]; /* attribute((counted_by(buckets_count))) */
+	qpcache_bucket_t buckets[] ISC_ATTR_COUNTED_BY(buckets_count);
 };

 #ifdef DNS_DB_NODETRACE
diff --git a/lib/isc/crypto/ossl1_1.c b/lib/isc/crypto/ossl1_1.c
index 7456afc245..46622de71a 100644
--- a/lib/isc/crypto/ossl1_1.c
+++ b/lib/isc/crypto/ossl1_1.c
@@ -22,6 +22,7 @@
 #include <openssl/rand.h>
 #include <openssl/ssl.h>

+#include <isc/attributes.h>
 #include <isc/buffer.h>
 #include <isc/crypto.h>
 #include <isc/endian.h>
@@ -60,7 +61,7 @@ struct isc_hmac_key {
 	uint32_t len;
 	isc_mem_t *mctx;
 	EVP_MD *md;
-	uint8_t secret[];
+	uint8_t secret[] ISC_ATTR_COUNTED_BY(len);
 };

 struct isc_crypto_quic_hp_protect {
diff --git a/lib/isc/crypto/ossl3.c b/lib/isc/crypto/ossl3.c
index 716786260d..bf2e108f2c 100644
--- a/lib/isc/crypto/ossl3.c
+++ b/lib/isc/crypto/ossl3.c
@@ -23,6 +23,7 @@
 #include <openssl/rand.h>
 #include <openssl/ssl.h>

+#include <isc/attributes.h>
 #include <isc/buffer.h>
 #include <isc/crypto.h>
 #include <isc/hmac.h>
@@ -46,7 +47,7 @@ struct isc_hmac_key {
 	uint32_t len;
 	isc_mem_t *mctx;
 	const OSSL_PARAM *params;
-	uint8_t secret[];
+	uint8_t secret[] ISC_ATTR_COUNTED_BY(len);
 };

 struct isc_crypto_quic_hp_protect {
diff --git a/lib/isc/histo.c b/lib/isc/histo.c
index c9eec23d60..985044ff07 100644
--- a/lib/isc/histo.c
+++ b/lib/isc/histo.c
@@ -21,6 +21,7 @@
 #include <string.h>

 #include <isc/atomic.h>
+#include <isc/attributes.h>
 #include <isc/bit.h>
 #include <isc/histo.h>
 #include <isc/magic.h>
@@ -75,7 +76,7 @@ struct isc_histomulti {
 	unsigned int magic;
 	unsigned int size;
 	isc_refcount_t references;
-	isc_histo_t *hg[];
+	isc_histo_t *hg[] ISC_ATTR_COUNTED_BY(size);
 };

 /**********************************************************************/
diff --git a/lib/isc/ht.c b/lib/isc/ht.c
index d86a1933c3..bd02a89282 100644
--- a/lib/isc/ht.c
+++ b/lib/isc/ht.c
@@ -15,6 +15,7 @@
 #include <string.h>

 #include <isc/ascii.h>
+#include <isc/attributes.h>
 #include <isc/hash.h>
 #include <isc/ht.h>
 #include <isc/magic.h>
@@ -45,7 +46,7 @@ struct isc_ht_node {
 	isc_ht_node_t *next;
 	uint32_t hashval;
 	size_t keysize;
-	unsigned char key[];
+	unsigned char key[] ISC_ATTR_COUNTED_BY(keysize);
 };

 struct isc_ht {
diff --git a/tests/bench/qpmulti.c b/tests/bench/qpmulti.c
index fb5f38c961..076faae7f6 100644
--- a/tests/bench/qpmulti.c
+++ b/tests/bench/qpmulti.c
@@ -18,6 +18,7 @@
 #include <unistd.h>

 #include <isc/async.h>
+#include <isc/attributes.h>
 #include <isc/barrier.h>
 #include <isc/lib.h>
 #include <isc/list.h>
@@ -346,7 +347,7 @@ struct bench_state {
 	uint32_t read_ops_per_tx;
 	uint32_t read_tx_per_loop;
 	double zipf_skew;
-	struct thread_args thread[];
+	struct thread_args thread[] ISC_ATTR_COUNTED_BY(nloops);
 };

 static void