Check the snprintf() return value in order to avoid the following
warnings from gcc:

config.c: In function ‘config_create’:
config.c:921:52: warning: ‘%s’ directive output may be truncated writing up to 
9679 bytes into a region of size 33 [-Wformat-truncation=]
  921 |                 snprintf(buf, sizeof(buf), "global.%s", ci->label);
      |                                                    ^~
config.c:921:17: note: ‘snprintf’ output between 8 and 9687 bytes into a 
destination of size 40
  921 |                 snprintf(buf, sizeof(buf), "global.%s", ci->label);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
config.c:364:40: warning: ‘%s’ directive output may be truncated writing up to 
9679 bytes into a region of size 133  -Wformat-truncation=]
  364 |         snprintf(buf, sizeof(buf), "%s.%s", section, name);
      |                                        ^~
In function ‘config_section_item’,
    inlined from ‘config_global_item’ at config.c:371:9,
    inlined from ‘config_create’ at config.c:931:8:
config.c:364:9: note: ‘snprintf’ output between 8 and 9687 bytes into a 
destination of size 140
  364 |         snprintf(buf, sizeof(buf), "%s.%s", section, name);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Signed-off-by: Miroslav Lichvar <mlich...@redhat.com>
---
 config.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/config.c b/config.c
index e454c91..e21cde7 100644
--- a/config.c
+++ b/config.c
@@ -361,7 +361,8 @@ static struct config_item *config_section_item(struct 
config *cfg,
 {
        char buf[CONFIG_LABEL_SIZE + MAX_IFNAME_SIZE];
 
-       snprintf(buf, sizeof(buf), "%s.%s", section, name);
+       if (snprintf(buf, sizeof(buf), "%s.%s", section, name) >= sizeof(buf))
+               return NULL;
        return hash_lookup(cfg->htab, buf);
 }
 
@@ -918,7 +919,11 @@ struct config *config_create(void)
        for (i = 0; i < N_CONFIG_ITEMS; i++) {
                ci = &config_tab[i];
                ci->flags |= CFG_ITEM_STATIC;
-               snprintf(buf, sizeof(buf), "global.%s", ci->label);
+               if (snprintf(buf, sizeof(buf), "global.%s", ci->label) >=
+                   sizeof(buf)) {
+                       fprintf(stderr, "option %s too long\n", ci->label);
+                       goto fail;
+               }
                if (hash_insert(cfg->htab, buf, ci)) {
                        fprintf(stderr, "duplicate item %s\n", ci->label);
                        goto fail;
-- 
2.37.3



_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to