From a2970616f41ad321428247301b19d0239d1eea8f Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@clisp.org>
Date: Tue, 5 Sep 2023 03:06:30 +0200
Subject: [PATCH] unistr/u{8,16,32}-strtok tests: Fix
 -Wanalyzer-allocation-size warnings.

* tests/unistr/test-u-strtok.h (test_u_strtok): Correct values of
input_len and delim_len.
---
 ChangeLog                    |  4 ++++
 tests/unistr/test-u-strtok.h | 10 ++++++----
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 6e4ba532ae..9c3eca693c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2023-09-04  Bruno Haible  <bruno@clisp.org>
 
+	unistr/u{8,16,32}-strtok tests: Fix -Wanalyzer-allocation-size warnings.
+	* tests/unistr/test-u-strtok.h (test_u_strtok): Correct values of
+	input_len and delim_len.
+
 	sigpipe tests: Fix -Wanalyzer-unsafe-call-within-signal-handler warning.
 	* tests/test-sigpipe.c (handler): Invoke _exit, not exit.
 	* tests/test-raise.c (handler): Update comments after 2020-11-25 change.
diff --git a/tests/unistr/test-u-strtok.h b/tests/unistr/test-u-strtok.h
index a156d58d24..c7da3d4027 100644
--- a/tests/unistr/test-u-strtok.h
+++ b/tests/unistr/test-u-strtok.h
@@ -50,10 +50,12 @@ test_u_strtok (void)
         'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'D', 'E', 0
       };
     ucs4_t u_delim[] = { 0x3000, 0x3001, 0 };
-    size_t input_len = 6 * SIZEOF (u_input);
-    UNIT *input = (UNIT *) malloc (input_len);
-    size_t delim_len = 6 * SIZEOF (u_delim);
-    UNIT *delim = (UNIT *) malloc (delim_len);
+    /* Convert ucs4_t[] to UNIT[].
+       Every ucs4_t yields at most 4 / sizeof (UNIT) units.  */
+    size_t input_len = SIZEOF (u_input) * (4 / sizeof (UNIT));
+    UNIT *input = (UNIT *) malloc (input_len * sizeof (UNIT));
+    size_t delim_len = SIZEOF (u_delim) * (4 / sizeof (UNIT));
+    UNIT *delim = (UNIT *) malloc (delim_len * sizeof (UNIT));
     UNIT *state;
     const UNIT *result;
     UNIT *ptr, *first_ptr, *second_ptr;
-- 
2.39.5