GCC 14.1.1 of Fedora 41 thinks that 'i' can be in a full range and
so 8 bytes is not enough to print it.

 lib/match.c: In function 'match_format':
 lib/match.c:1631:45:
         error: '%d' directive output may be truncated writing
                between 1 and 11 bytes into a region of size 8
  1631 |             snprintf(str_i, sizeof(str_i), "%d", i);
       |                                             ^~
 lib/match.c:1631:44:
           note: directive argument in the range [-2147483646, 1]
  1631 |             snprintf(str_i, sizeof(str_i), "%d", i);
       |                                            ^~~~
 lib/match.c:1631:13:
           note: 'snprintf' output between 2 and 12 bytes into
                 a destination of size 8
  1631 |             snprintf(str_i, sizeof(str_i), "%d", i);
       |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In practice that value can't be larger than 2, but it's not a
performance critical code, so let's just increase the size to
a maximum 12.

Signed-off-by: Ilya Maximets <i.maxim...@ovn.org>
---
 lib/match.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/match.c b/lib/match.c
index 0b9dc4278..9b7e06e0c 100644
--- a/lib/match.c
+++ b/lib/match.c
@@ -1618,7 +1618,7 @@ match_format(const struct match *match,
         ds_put_char(s, ',');
     }
     for (i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
-        char str_i[8];
+        char str_i[12];
 
         if (!wc->masks.vlans[i].tci) {
             break;
-- 
2.45.2

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to