This is an automated email from Gerrit.

"Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/7403

-- gerrit

commit 7fbb115cda77ca1b39fb0aefd95849f505b275f2
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Sat Dec 17 23:05:23 2022 +0100

    jtag: fix build with configure --enable-verbose
    
    With flag --enable-verbose, configure enables compiling some
    conditional code that with new gcc triggers an error:
            error: '%04x' directive output may be truncated writing
            between 4 and 8 bytes into a region of size 5
            [-Werror=format-truncation=]
    
    Extend the buffer to contain the full 8 bytes of %04x on a 'int'
    and change the limit in snprintf.
    Skip the intermediate buffer 's[4]'.
    Align the code to the coding style.
    
    Change-Id: Ifc8a6e4686555578a7355a1f6049471fd5e31913
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>
    Reported-by: Karl Hammar <k...@aspodata.se>
    Reported-by: Tommy Murphy <tommy_mur...@hotmail.com>
    Fixes: https://sourceforge.net/p/openocd/tickets/376/

diff --git a/src/jtag/drivers/arm-jtag-ew.c b/src/jtag/drivers/arm-jtag-ew.c
index a3e9e17129..7db3c7b15a 100644
--- a/src/jtag/drivers/arm-jtag-ew.c
+++ b/src/jtag/drivers/arm-jtag-ew.c
@@ -776,17 +776,12 @@ static int armjtagew_usb_read(struct armjtagew 
*armjtagew, int exp_in_length)
 
 static void armjtagew_debug_buffer(uint8_t *buffer, int length)
 {
-       char line[81];
-       char s[4];
-       int i;
-       int j;
+       char line[8 + 3 * BYTES_PER_LINE + 1];
 
-       for (i = 0; i < length; i += BYTES_PER_LINE) {
-               snprintf(line, 5, "%04x", i);
-               for (j = i; j < i + BYTES_PER_LINE && j < length; j++) {
-                       snprintf(s, 4, " %02x", buffer[j]);
-                       strcat(line, s);
-               }
+       for (int i = 0; i < length; i += BYTES_PER_LINE) {
+               int n = snprintf(line, 9, "%04x", i);
+               for (int j = i; j < i + BYTES_PER_LINE && j < length; j++)
+                       n += snprintf(line + n, 4, " %02x", buffer[j]);
                LOG_DEBUG("%s", line);
 
                /* Prevent GDB timeout (writing to log might take some time) */
diff --git a/src/jtag/drivers/opendous.c b/src/jtag/drivers/opendous.c
index d0c5277882..c353aef407 100644
--- a/src/jtag/drivers/opendous.c
+++ b/src/jtag/drivers/opendous.c
@@ -796,17 +796,12 @@ int opendous_usb_read(struct opendous_jtag *opendous_jtag)
 
 void opendous_debug_buffer(uint8_t *buffer, int length)
 {
-       char line[81];
-       char s[4];
-       int i;
-       int j;
+       char line[8 + 3 * BYTES_PER_LINE + 1];
 
-       for (i = 0; i < length; i += BYTES_PER_LINE) {
-               snprintf(line, 5, "%04x", i);
-               for (j = i; j < i + BYTES_PER_LINE && j < length; j++) {
-                       snprintf(s, 4, " %02x", buffer[j]);
-                       strcat(line, s);
-               }
+       for (int i = 0; i < length; i += BYTES_PER_LINE) {
+               int n = snprintf(line, 9, "%04x", i);
+               for (int j = i; j < i + BYTES_PER_LINE && j < length; j++)
+                       n += snprintf(line + n, 4, " %02x", buffer[j]);
                LOG_DEBUG("%s", line);
        }
 }

-- 

Reply via email to