From a52346ae503dc6aedb5115ef6b089ae26f46a58c Mon Sep 17 00:00:00 2001 From: Benjamin Kaduk Date: Thu, 6 Feb 2014 15:52:49 -0500 Subject: [PATCH] Satisfy clang's aggressive strlcpy warnings Passing something related to the length of the source as the length argument to strlcpy triggers a warning, which is converted to an error with --enable-checking (on FreeBSD 10.0). The current code is safe, since it is using the same expression that was used to allocate the destination buffer, but switch to using a separate variable to hold the length and use that variable for both allocation and copying, to appease the compiler. Change-Id: I580083d142fd19a4e7828c915b4846868fa8f917 Reviewed-on: http://gerrit.openafs.org/10818 Tested-by: BuildBot Reviewed-by: Perry Ruiter Reviewed-by: Jeffrey Altman --- src/cmd/cmd.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/cmd/cmd.c b/src/cmd/cmd.c index 6887454270..1bbdc8e82e 100644 --- a/src/cmd/cmd.c +++ b/src/cmd/cmd.c @@ -1382,6 +1382,7 @@ cmd_OptionAsList(struct cmd_syndesc *syn, int pos, struct cmd_item **value) const char *str; struct cmd_item *item, **last; const char *start, *end; + size_t len; int code; if (pos > syn->nParms) @@ -1406,8 +1407,9 @@ cmd_OptionAsList(struct cmd_syndesc *syn, int pos, struct cmd_item **value) start = str; while ((end = strchr(start, ' '))) { item = calloc(1, sizeof(struct cmd_item)); - item->data = malloc(end - start + 1); - strlcpy(item->data, start, end - start + 1); + len = end - start + 1; + item->data = malloc(len); + strlcpy(item->data, start, len); *last = item; last = &item->next; for (start = end; *start == ' '; start++); /* skip any whitespace */ @@ -1416,8 +1418,9 @@ cmd_OptionAsList(struct cmd_syndesc *syn, int pos, struct cmd_item **value) /* Catch the final element */ if (*start != '\0') { item = calloc(1, sizeof(struct cmd_item)); - item->data = malloc(strlen(start) + 1); - strlcpy(item->data, start, strlen(start) + 1); + len = strlen(start) + 1; + item->data = malloc(len); + strlcpy(item->data, start, len); *last = item; }